我们在设置jtree的样式的时候,一般都用DefaultTreeCellRenderer这个类进行构造。
基本代码:
Jtree tree=new Jtree();
DefaultTreeCellRenderer ren=new DefaultTreeCellRenderer();
ren.setBackgroundSelectionColor(Color newColor);//选中的时候背景颜色什么的。
tree.setCellRenderer(ren);//设置tree的颜色
但是这只是针对于选中,不选中。或者整体的tree的样式的调节。很死板,不能单独对一个节点进行样式的改变。
我们在来看看这个类,DefaultTreeCellRenderer。这个类实际上是实现的接口TreeCellRenderer,这个接口有个方法:
Component getTreeCellRendererComponent(JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus)
将当前树单元格的值设置为 value
。如果 selected
为 true,则将单元格作为已选择的单元格进行绘制。如果 expanded
为 true,则当前扩展该节点,如果 leaf
为 true,则该节点表示叶节点,如果 hasFocus
为 true,则该节点当前拥有焦点。tree
是为其配置接收者的 JTree
。返回渲染器用来绘制值的 Component
。
我们可以写一个新类继承这个 DefaultTreeCellRenderer类。然后覆写这个方法。最终可以实现单个单个节点tree的样式的设置。
class MyTreeCellRenderer extends DefaultTreeCellRenderer {
private final TreeCellRenderer renderer;
public String key;
public MyTreeCellRenderer(TreeCellRenderer renderer,String key) {
this.renderer = renderer;
this.key=key;
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean isSelected, boolean expanded,boolean leaf, int row, boolean hasFocus) {
JComponent c = (JComponent) renderer.getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, hasFocus);
if (isSelected) {
c.setOpaque(false);//设置该组件边缘像素不可编辑
c.setForeground(getTextSelectionColor());
} else {
c.setOpaque(true);
if (key!=null && !key.isEmpty() &&
value.toString().toLowerCase().startsWith(key.toLowerCase())) {//如果以该关键字开头的
c.setForeground(getTextNonSelectionColor());
c.setBackground(Color.YELLOW);//则设置黄颜色作为高亮
} else {
c.setForeground(getTextNonSelectionColor());
c.setBackground(getBackgroundNonSelectionColor());
}
}
return c;
}
}
主类:
public class HighTest {
public static void main(String[] args) {
//整体窗口的使用
final JFrame jFrame=new JFrame("我的第一个窗体");
jFrame.setSize(new Dimension(800, 500));//设置窗体的大小
jFrame.setBackground(Color.BLACK);
jFrame.setLocation(new Point(300, 300));//设置窗体显示的位置
jFrame.setVisible(true);
jFrame.setLayout(new FlowLayout());
jFrame.addWindowListener(new WindowAdapter() {//加入关闭窗体事件
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("系统正在关闭");
System.exit(0);
}
});
DefaultMutableTreeNode color = new DefaultMutableTreeNode( " Color ");//设置一个tree的根节点color
DefaultMutableTreeNode gray = new DefaultMutableTreeNode ( " Gray " );//设置另一个节点gray
color.add (gray);//把Gary加入到color
//设置各个节点子类、父类关系
DefaultMutableTreeNode red=new DefaultMutableTreeNode ( " Red " );
color.add (red );
DefaultMutableTreeNode Lightgray=new DefaultMutableTreeNode ( " Lightgray " );
gray.add (Lightgray );
DefaultMutableTreeNode Darkgray=new DefaultMutableTreeNode ( " Darkgray " );
gray.add (Darkgray );
DefaultMutableTreeNode Green=new DefaultMutableTreeNode ( " Green " );
color.add ( Green);
JTree example5 = new JTree (color);//初始化jtree,把根节点color传入
example5.addTreeSelectionListener(new SelectNodeHandle(example5));
example5.addMouseListener(new SelectNodeHandle(example5));
example5.setCellRenderer(new MyTreeCellRenderer(example5.getCellRenderer()," Lightgray "));
//getCellRenderer通过这个方法可以取得TreeCellRenderer一个接口对象,“Lightgray ”就是关键字,这个相当于调用新类的构造方法
jFrame.add(example5);//加入jframe面板
}
}
- 大小: 61.8 KB
分享到:
相关推荐
`TreeCellRenderer`则控制着树中每个节点的外观,通过重写`getTreeCellRendererComponent`方法,可以自定义节点的显示样式,如文本、图标等。 `JTree`提供了事件监听机制,例如`TreeExpansionListener`监听树的展开...
本文将详细介绍`JTree`的各种使用方法,包括如何创建、自定义外观、以及一些高级功能的实现。 #### 自动展开树 `JTree`可以通过编程方式来控制其展开和折叠的行为。例如,下面的代码展示了如何创建一个`JTree`并...
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel,...
这个类将重写 getTreeCellRendererComponent 方法,以便我们可以自定义树的节点。 在 IconNodeRenderer 类中,我们重写了 getTreeCellRendererComponent 方法。在这个方法中,我们可以通过 ((IconNode) value)....
本教程将深入讲解JTree的使用方法,包括创建、配置、事件处理以及自定义节点图标等方面,同时提供相关的源码示例。 1. **创建JTree** 创建JTree的基本步骤是创建一个TreeNode对象或TreeModel,然后将其传递给JTree...
你可以使用DefaultTreeCellRenderer的子类,并覆盖`getTreeCellRendererComponent`方法,以便在其中添加图片。 ```java public class ImageTreeCellRenderer extends DefaultTreeCellRenderer { @Override public...
`Jtree不同节点使用不同图片实现 - Alexander - 博客园_files`这个文件夹很可能包含了与博客文章相关的HTML和CSS资源,例如图片文件等。这些文件可能用于演示代码中的具体效果,读者可以参考这些资源来更好地理解...
在本实例中,我们将深入探讨如何创建一个具有复选框的`JTree`,以及相关的编程实践。 首先,我们需要导入必要的Java Swing库,包括`javax.swing.JTree`、`javax.swing.tree.DefaultTreeModel`、`javax.swing.tree....
下面将详细介绍`JTree`的相关知识点,并结合实例进行讲解。 1. **`JTree`的基本概念** `JTree`是Java AWT和Swing库中的一个类,继承自`JComponent`。它用于创建和显示树状结构,通常用于展示具有父节点和子节点的...
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { Component c = super.getTreeCellRendererComponent...
我们需要创建一个继承自DefaultTreeCellRenderer的类,并覆盖`getTreeCellRendererComponent`方法。在这个方法里,我们可以设置复选框的显示,并根据节点的状态来改变其选中或未选中的外观。 2. **处理复选框的...
`DefaultTreeCellRenderer`是Swing默认的渲染器,我们可以继承它并覆盖`getTreeCellRendererComponent`方法,在其中添加复选框组件。下面是一个基本的实现: ```java import javax.swing.tree.TreeCellRenderer; ...
3. **更新模型**:最后,我们需要通知JTree的模型(默认是DefaultTreeModel)有关更改。 ```java DefaultTreeModel treeModel = (DefaultTreeModel) jTree.getModel(); treeModel.nodeStructureChanged(parentNode);...
通过分析和运行这个示例,你可以更直观地理解`JTree`的使用方法,同时也可以尝试修改代码以实现不同的功能,如添加更多的节点、改变节点的图标等。 总之,`JTree`是Java Swing中展示和操作层次数据的强大工具。通过...
【IconNode.zip_jtree_zip】是一个与Java编程相关的压缩包,其主要包含了一个名为`IconNode.java`的源代码文件。这个文件很可能是一个实现了自定义树节点类的代码,其中结合了图标显示功能,用于增强Java Swing中的...
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { // 自定义渲染逻辑 } }); ``` 3. **交互操作**:...
在`JTree`的节点中添加`JCheckBox`,我们需要自定义`TreeCellRenderer`,重写`getTreeCellRendererComponent`方法。在这个方法中,我们可以创建一个`DefaultTreeCellRenderer`的实例,并在其上添加`JCheckBox`。...
程序中使用了 getTreeCellRendererComponent() 方法来渲染树形结构的节点。这个方法是 FileTreeRenderer 类的一个方法,用于返回渲染的节点组件。 8. 文件目录遍历 程序中使用了 File 类来遍历文件目录。File 类是...
我们可以创建一个类实现这个接口,并在`getTreeCellRendererComponent`方法中设置一个JCheckBox。 3. **TreeSelectionModel**:为了处理用户的选择,我们需要关注TreeSelectionModel,它是JTree的模型部分,负责...