MyDefaultTreeCellRenderer.java
import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
/**
* 自定义树描述类,将树的每个节点设置成不同的图标
* @author RuiLin.Xie - xKF24276
*
*/
public class MyDefaultTreeCellRenderer extends DefaultTreeCellRenderer
{
/**
* ID
*/
private static final long serialVersionUID = 1L;
/**
* 重写父类DefaultTreeCellRenderer的方法
*/
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus)
{
//执行父类原型操作
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,
row, hasFocus);
setText(value.toString());
if (sel)
{
setForeground(getTextSelectionColor());
}
else
{
setForeground(getTextNonSelectionColor());
}
//得到每个节点的TreeNode
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
//得到每个节点的text
String str = node.toString();
//判断是哪个文本的节点设置对应的值(这里如果节点传入的是一个实体,则可以根据实体里面的一个类型属性来显示对应的图标)
if (str == "a")
{
this.setIcon(new ImageIcon("treeimg/a.GIF"));
}
if (str == "b")
{
this.setIcon(new ImageIcon("treeimg/b.GIF"));
}
if (str == "c")
{
this.setIcon(new ImageIcon("treeimg/c.GIF"));
}
return this;
}
}
TreeIconDemo.java
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class TreeIconDemo extends JFrame
{
/**
* ID
*/
private static final long serialVersionUID = 1L;
private JTree tree;
/**
* Launch the application
*
* @param args
*/
public static void main(String args[])
{
try
{
TreeIconDemo frame = new TreeIconDemo();
frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* Create the frame
*/
public TreeIconDemo()
{
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);
tree = new JTree();
scrollPane.setViewportView(tree);
//创建数据
DefaultTreeModel defaultTreeModel = createModel();
//设置数据
tree.setModel(defaultTreeModel);
//设置自定义描述类
tree.setCellRenderer(new MyDefaultTreeCellRenderer());
}
/**
* 创建树节点模型
* @return
*/
public DefaultTreeModel createModel()
{
DefaultMutableTreeNode root = new DefaultMutableTreeNode("a");
DefaultMutableTreeNode b = new DefaultMutableTreeNode("b");
DefaultMutableTreeNode c = new DefaultMutableTreeNode("c");
root.add(b);
root.add(c);
return new DefaultTreeModel(root);
}
}
分享到:
相关推荐
每个节点可以有任意数量的子节点,并且可以通过JTree的模型(TreeModel)来添加、删除或修改这些节点。 ### 添加节点 1. **创建节点**:首先,我们需要创建一个DefaultMutableTreeNode对象,作为新节点。 ```java ...
总的来说,通过自定义TreeNode和TreeCellRenderer,你可以在JTree中为每个节点赋予个性化的图标,提高应用程序的用户界面质量。继续深入学习Swing组件和事件处理,你将能够构建出更多功能丰富的图形用户界面。
`DefaultTreeModel`基于`TreeNode`接口,每个节点都是`TreeNode`的实现。`TreeNode`表示树中的一个节点,可以包含任意数量的子节点。 3. **构建`JTree`** 创建`JTree`时,通常需要提供一个`TreeNode`作为根节点。...
每个节点可以包含任意数量的子节点,形成一个树形结构。 - **DefaultMutableTreeNode**:Swing提供了一个默认实现`DefaultMutableTreeNode`,支持添加、删除和修改节点操作。 - **TreeModel**:`javax.swing.tree....
每个节点(TreeNode)可以有零个或多个子节点,形成一个层次结构。用户可以通过单击节点来展开或折叠其子节点,从而探索数据的深度。 **2. 创建JTree** 创建JTree通常涉及以下几个步骤: - 实现`javax.swing.tree....
6. **树遍历**:可以使用`preorderTraversal`或`inorderTraversal`方法来遍历整个树,访问每个节点。 7. **拖放支持**:JTree也支持拖放操作,可以使用`setTransferHandler`方法设置拖放处理程序。 8. **树数据的...
4. **节点图标与展开状态**:说明如何设置不同类型的节点图标以及控制节点的展开和折叠。 5. **用户交互**:包含如何处理用户的点击、拖放操作,以及如何添加右键菜单。 6. **性能优化**:讨论懒加载策略,仅在需要...
`TreeCellRenderer`负责决定`JTree`中每个节点的外观。我们需要创建一个`DefaultTreeCellRenderer`的子类,并在其中添加一个`JCheckBox`。 ```java public class CheckboxTreeCellRenderer extends ...
每个节点通常由 HTML 元素表示,节点间的父子关系通过类名或自定义属性来标记。当用户点击节点时,`JavaScript` 代码会处理相应的点击事件,执行展开、折叠或跳转等操作。 **应用场景** - **网站导航**:在大型...
下面我们将深入探讨`JTree`的实现及其相关知识点。 1. **JTree基本概念**: JTree是Java Swing中的一个组件,用于在图形用户界面中显示树状数据结构。然而,这里的"JTree"特指一个使用纯JavaScript编写的树形控件...
2. **节点(Node)**:在树中,每个可视化的元素都是一个节点。`DefaultMutableTreeNode` 是 `JTree` 的默认节点类型,它支持子节点的添加和移除。你可以自定义节点类来携带额外的信息或行为。 3. **监听器...
7. **Rendering**:`JTree`使用`TreeCellRenderer`来决定如何显示每个节点,包括文本颜色、字体、背景色和图标。 **JTree的使用** 1. **创建JTree实例**:可以通过传递`TreeModel`或数组(表示根节点及其子节点)...
`jTree`可以通过`DefaultMutableTreeNode`类来构建树结构,每个节点可以包含子节点,形成多级结构。通过`TreeModel`接口,我们可以定义树的数据模型,从而决定如何填充树结构。默认情况下,`jTree`会使用简单的文本...
Java JTree 实例笔记展示了 JTree 的多种功能和特性,包括多行单元格、宽单元格编辑器、每个节点的 tooltip 文本、复选框节点、不可见节点、图标节点、文本图标、禁用节点、只有文本和动画图标节点等。这些功能和...
`TreeCellRenderer`则控制着树中每个节点的外观,通过重写`getTreeCellRendererComponent`方法,可以自定义节点的显示样式,如文本、图标等。 `JTree`提供了事件监听机制,例如`TreeExpansionListener`监听树的展开...
- **图标支持**: 每个节点可以关联一个图标,表示其状态,如打开、关闭、叶子节点等。 - **键盘导航**: 用户可以通过键盘进行导航和操作,如使用`Space`键展开/折叠节点,`Arrow`键移动焦点。 ### 3. JTree的使用...
每个节点可以有子节点,形成一个可展开和折叠的层次结构。节点通常由DefaultMutableTreeNode类表示,它们可以容纳自定义的数据对象。 创建一个简单的JTree首先要创建树的模型。你可以使用DefaultTreeModel,它基于...
每个菜单项可以被视为一个XML节点,通过子节点表示子菜单,属性则用来设置菜单的文字、链接、图标等信息。使用XML配置的优点在于它与编程语言无关,易于编辑和维护,同时也方便了程序解析和生成菜单结构。 **多级...
5. **图标和文本**: `JTree` 允许为每个节点设置不同的图标和展开/折叠状态的图标,以增强视觉效果。 6. **默认行为**: `JTree` 有预定义的键盘快捷键和鼠标操作,比如使用空格键选择节点,使用左右箭头展开或折叠...