treefactoryimpl.java
来自「Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI」· Java 代码 · 共 636 行 · 第 1/2 页
JAVA
636 行
//root.add( periods );
//root.add( categories );
return new DefaultTreeModel(root);
}
class TypeNode extends DefaultMutableTreeNode {
private static final long serialVersionUID = 1L;
boolean filtered;
RaplaType type;
String title;
TypeNode(RaplaType type, Object userObject, String title) {
this.type = type;
this.title = title;
setUserObject( userObject );
}
TypeNode(RaplaType type, Object userObject) {
this( type, userObject, null);
}
public RaplaType getType() {
return type;
}
public boolean isFiltered() {
return filtered;
}
public void setFiltered(boolean filtered) {
this.filtered = filtered;
}
public Object getTitle() {
if ( title != null)
{
return title;
}
else
{
return userObject.toString();
}
}
}
public DefaultMutableTreeNode newNamedNode( Named element) {
return new NamedNode( element);
}
public TreeModel createModel(Category category) throws RaplaException {
return new DefaultTreeModel(new CategoryNode(getI18n().getLocale(),null,category));
}
public TreeModel createModelFlat(Named[] element) {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("");
for (int i=0; i< element.length; i++) {
root.add( new NamedNode( element[i]));
}
return new DefaultTreeModel(root);
}
public TreeToolTipRenderer createTreeToolTipRenderer() {
return new RaplaTreeToolTipRenderer();
}
public TreeCellRenderer createRenderer() {
return new ComplexTreeCellRenderer();
}
static public class CategoryNode extends RecursiveNode implements MutableTreeNode {
Locale locale ;
public CategoryNode(Locale locale, TreeNode parent,Category category) {
super(parent,category);
this.locale = locale;
}
protected Category getCategory() {
return (Category) getUserObject();
}
protected Object[] getChildObjects() {
return getCategory().getCategories();
}
protected RecursiveNode createChildNode(Object userObject) {
return new CategoryNode(locale, this,(Category)userObject);
}
public String toString() {
return getCategory().getName( locale );
}
public void insert( MutableTreeNode child, int index ) { }
public void remove( int index ) { }
public void remove( MutableTreeNode node ) { }
public void setUserObject( Object object ) { }
public void removeFromParent()
{
parent = null;
}
public void setParent( MutableTreeNode newParent )
{
parent = newParent;
}
}
public class NamedNode extends DefaultMutableTreeNode {
private static final long serialVersionUID = 1L;
NamedNode(Named obj) {
super(obj);
}
public String toString() {
Named obj = (Named) getUserObject();
if (obj != null) {
return obj.getName(getI18n().getLocale());
} else {
return super.toString();
}
}
};
// TODO this class is a bit of Hack
class ComplexTreeCellRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
Icon personIcon;
Icon folderClosedIcon;
Icon folderOpenIcon;
Font normalFont;
Font bigFont;
Border nonIconBorder = BorderFactory.createEmptyBorder(1,0,1,0);
Border conflictBorder = BorderFactory.createEmptyBorder(2,0,2,0);
public ComplexTreeCellRenderer() {
personIcon = TreeFactoryImpl.this.getIcon("icon.tree.persons");
//folderClosedIcon = UIManager.getIcon("Tree.closedIcon");
//folderOpenIcon = UIManager.getIcon("Tree.openIcon");
folderClosedIcon = getI18n().getIcon("icon.folder");
folderOpenIcon = getI18n().getIcon("icon.folder");
normalFont = UIManager.getFont("Tree.font");
bigFont = normalFont.deriveFont( Font.BOLD, (float) (normalFont.getSize() * 1.2 ));
setLeafIcon(defaultIcon);
}
public void setLeaf(Object object) {
Icon icon = null;
if (object instanceof Allocatable) {
if ( ((Allocatable)object).isPerson())
{
icon = personIcon;
}
else
{
icon = defaultIcon;
}
} else if (object instanceof DynamicType ){
DynamicType type = (DynamicType ) object;
String classificationType = type.getAnnotation( DynamicTypeAnnotations.KEY_CLASSIFICATION_TYPE);
if ( DynamicTypeAnnotations.VALUE_RESERVATION_CLASSIFICATION.equals( classificationType ) )
{
setBorder( conflictBorder );
}
else
{
icon =folderClosedIcon;
}
}
if ( icon == null) {
setBorder( nonIconBorder );
}
setLeafIcon( icon );
}
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded,
boolean leaf,int row,boolean hasFocus) {
setBorder( null );
setFont( normalFont );
setClosedIcon( folderClosedIcon );
setOpenIcon( folderOpenIcon );
if ( value != null && value instanceof TypeNode)
{
TypeNode typeNode =(TypeNode)value;
Icon bigFolderIcon;
if ( typeNode.getType().equals( User.TYPE))
{
bigFolderIcon = getI18n().getIcon("icon.big_folder_users");
}
else if ( typeNode.getType().equals( Period.TYPE))
{
bigFolderIcon = getI18n().getIcon("icon.big_folder_periods");
}
else if ( typeNode.getType().equals( Reservation.TYPE))
{
if ( typeNode.isFiltered())
{
bigFolderIcon = getI18n().getIcon("icon.big_folder_events_filtered");
}
else
{
bigFolderIcon = getI18n().getIcon("icon.big_folder_events");
}
}
else if ( typeNode.getType().equals( Conflict.TYPE))
{
bigFolderIcon = getI18n().getIcon("icon.big_folder_conflicts");
}
else
{
if ( typeNode.isFiltered())
{
bigFolderIcon = getI18n().getIcon("icon.big_folder_resources_filtered");
}
else
{
bigFolderIcon = getI18n().getIcon("icon.big_folder_resources");
}
}
setClosedIcon( bigFolderIcon );
setOpenIcon( bigFolderIcon );
setLeafIcon( bigFolderIcon );
setFont( bigFont );
value = typeNode.getTitle();
}
else if (value instanceof CategoryNode)
{
Category category = (( CategoryNode) value).getCategory();
if ( category.getParent() == null) {
setClosedIcon( getI18n().getIcon("icon.big_folder_categories") );
setOpenIcon( getI18n().getIcon("icon.big_folder_categories") );
setFont( bigFont );
} else {
boolean hasChildren = category.getCategories().length > 0;
if ( !hasChildren) {
setClosedIcon( null );
setOpenIcon( null );
setLeafIcon( null );
setBorder( nonIconBorder );
}
}
}
else
{
Object nodeInfo = getTheUserObject( value );
if (nodeInfo instanceof Conflict)
{
Conflict conflict = (Conflict) nodeInfo;
String text = getInfoFactory().getToolTip( conflict );
value = text ;
setBorder ( conflictBorder );
setLeafIcon( null );
}
else
{
setClosedIcon( folderClosedIcon );
setOpenIcon( folderOpenIcon );
if ( leaf )
{
setLeaf( nodeInfo);
}
}
}
Component result = super.getTreeCellRendererComponent(tree, value,
sel, expanded,
leaf, row, hasFocus);
return result;
}
}
private static Object getTheUserObject( Object node ){
if (node instanceof DefaultMutableTreeNode)
return ((DefaultMutableTreeNode) node).getUserObject();
if (node instanceof RecursiveNode)
return ((RecursiveNode) node).getUserObject();
return node;
}
class RaplaTreeToolTipRenderer implements TreeToolTipRenderer {
public String getToolTipText(JTree tree,int row) {
Object node = tree.getPathForRow(row).getLastPathComponent();
Object value = getTheUserObject( node );
if ( value instanceof Conflict) {
return null;
}
return getInfoFactory().getToolTip(value);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?