swing树的节点外观_DefaultTreeCellRenderer

JTree默认的外观是比较单一的,它提供了如下几种改变结点外观的方式: 下面的三种方式,这里只学第一种,后面会学第二种和第三种

1、使用DefaultTreeCellRenderer直接改变节点的外观,这种方式可以改变整棵树所有节点的字体、颜色和图标 2、为JTree指定DefaultTreeCellRenderer的扩展类对象作为JTree的节点绘制器,该绘制器负责为不同节点使用不同的字体、颜色和图 3、为JTree指定一个实现TreeCellRenderer接口的节点绘制器,该绘制器可以为不同的节点自由绘制任意内容,这是最复杂但最灵活的节点绘制器

第一种方式最简单,但灵活性最差,因为它会改变整棵树所有节点的外观。在这种情况下,Jtree的所有节点依然使用相同的图标,相当于整体替换了Jtree中节点的所有默认图标。用户指定的节点图标未必就比JTree默认的图标美观 第二种方式是我们经常使用的,用来改变节点的外观

 

DefaultTreeCellRenderer提供了如下几个方法来修改节点的外观:

方法作用
setBackgroundNonSelectionColor(Color newColor)设置用于非选定节点的背景颜色
setBackgroundSelectionColor(Color newColor)设置节点在选中状态下的背景颜色
setBorderSelectionColor(Color newColor)设置选中状态下节点的边框颜色
setClosedIcon(Icon newIcon)设置处于折叠状态下非叶子节点的图标
setFont(Font font)设置节点文本的字体
setLeaflcon(Icon newIcon)设置叶子节点的图标
setOpenlcon(Icon newlcon)设置处于展开状态下非叶子节点的图标
setTextNonSelectionColor(Color newColor)设置绘制非选中状态下节点文本的颜色
setTextSelectionColor(Color newColor)设置绘制选中状态下节点文本的颜色

 

swing树的节点外观_DefaultTreeCellRenderer的练习

 

swing树的节点外观_扩展DefaultTreeCellRenderer

扩展DefaultTreeCellRenderer改变结点外观

JTree默认的外观是比较单一的,它提供了如下几种改变结点外观的方式: 下面的三种方式,这里只学第二种,上面已经学了第一种

1、使用DefaultTreeCellRenderer直接改变节点的外观,这种方式可以改变整棵树所有节点的字体、颜色和图标 2、为JTree指定DefaultTreeCellRenderer的扩展类对象作为JTree的节点绘制器,该绘制器负责为不同节点使用不同的字体、颜色和图 3、为JTree指定一个实现TreeCellRenderer接口的节点绘制器,该绘制器可以为不同的节点自由绘制任意内容,这是最复杂但最灵活的节点绘制器

 

第一种方式最简单,但灵活性最差,因为它会改变整棵树所有节点的外观。在这种情况下,Jtree的所有节点依然使用相同的图标,相当于整体替换了Jtree中节点的所有默认图标。用户指定的节点图标未必就比JTree默认的图标美观。简单说就是我们这种方法无法给某个节点设置独立的样式 第二种方式是我们经常使用的,用来改变节点的外观

 

DefaultTreeCellRenderer实现类实现了TreeCellRenderer接口,该接口里只有一个用于绘制节点内容的方法:

该方法负责绘制JTree节点。学习JList的时候,如果要绘制JList的列表项外观的内容,需要实现ListCellRenderer接口,通过重写getTreeCellRendererComponent()方法返回一个Component对象, 该对象就是JTree的节点组件。两者之间非常类似

 

DefaultTreeCellRenderer类继承了JLabel,实现getTreeCellRendererComponent()方法时返回this ,即返回一个特殊的JLabel对象,如果需要根据节点内容来改变节点的外观,则可以再次扩展DefaultTreeCellRenderer类,并再次重写它提供的getTreeCellRendererComponent()方法

 

swing树的节点外观_扩展DefaultTreeCellRenderer的练习

 

swing树的节点外观_TreeCellRenderer接口

实现TreeCellRenderer接口改变结点外观

这种改变结点外观的方式是最灵活的,程序实现TreeCellRenderer接口时同样需要实现getTreeCellRendererComponent()方法,该方法可以返回任意类型的组件,该组件将作为JTree的结点。通过这种方式可以最大程度的改变结点的外观

 

swing树的节点外观_TreeCellRenderer接口的练习