- 浏览: 451220 次
- 性别:
- 来自: 江门
文章分类
最新评论
-
ctz_131415:
谁能告诉我这个分页控件如何添加到窗口上?谢谢了
C# Winform DataGridView 公共分页实现 -
omymy:
FrmPage_Shown是放在页面加载时的load事件里的, ...
C# Winform DataGridView 公共分页实现 -
qie:
如何使用该分页控件?
C# Winform DataGridView 公共分页实现 -
anyanlonga:
看地图干什么用啊,如果查公交的话,自认为还是白度好
Android 上创建和地图相关的应用,用 Google 地图 API 好,还是百度等第三方地图 API 好 -
dedepro:
果然很强。
CSS层 固定置顶部兼容IE6等以上浏览器
本文介绍Java Swing中的JTree模型,介绍如何创建、修改、遍历,设置树。参考Core Java2相关章节及其源代码。
Swing树使用人们所熟悉的文件夹和树叶图来显示分层的数据。树由节点组成,节点可以是文件夹,也可以是树叶。文件夹可以有子节点,除根节点之外的所有节点都只有一个父节点。空的文件夹与树叶的不同之处就在于它允许有子节点。
除父节点和子节点外,树的节点还有一个用户对象(当使用DefaultTreeModel时就会呈现一个用户对象)。用户对象是Object类型,因此它提供了一个将任意对象与节点相关联的办法。
树有一个简单的模型,每一个JTree实例都要维护对绘制器和编辑器的引用,这个绘制器和编辑器被树中所有的节点所使用。表1中列出了swing.tree包中的主要类。
表1 Swing.tree包中的主要类
名 称 实 现
DefaultMutableTreeNode 一个具有一个父节点、(可能)许多子节点和 一个用户对象的可变节点,为相关联的节点提供了访问方法。如果没有任何子节点,这个节点就是树叶。
DefaultTreeModel 一个激发TreeModel Events事件的简单可变的模型。提供对子节点的访问方法,但不是提供对父节点的访问方法。
DefaultTreeCellEditor 绘制器和编辑器的包装器,它把一个“真正”的编辑器组件放在节点图标的旁边。
DefaultTreeCellRenderer 具有字体、颜色和图标访问方法的JLabel扩 展,它提供图标的缺省值。
TreePath 由一个节点到另一个节点的路径。路径中的节点存储在一个数组中。路径用于在选取内容之间进行通信。
1.构建树模型
详细代码见SimpleTree.java
DefaultMutableTreeNode root = new DefaultMutableTreeNode("World");
DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");
root.add(country);
。。。
JTree tree = new JTree(root);
Container contentPane = getContentPane();
contentPane.add(new JScrollPane(tree));
这些代码来自一个JFrame的构造子中。这里通过JTree来创建一个TreeModel的实例。
2.树结点
树节点由TreeNode接口定义,TreeNode接口被MutableTreeNode接口扩展,而MutableTreeNode接口又由 DefaultMutableTreeNode类来实现。
树结构详细类图
2.1 TreeNode接口
TreeNode接口定义了(固定)树节点的实质,表2总结了TreeNode相关方法。
表2TreeNode接口
public abstract Enumeration children()
public abstract TreeNode getParent()
public abstract TreeNode getChildAt(int)
public abstract int getChildCount()
public abstract int getIndex(TreeNode)
public abstract abstract boolean getAllowsChildren()
public abstract boolean isLeaf()
上面列出的前两组方法是对一个节点的父节点和子节点的访问方法。访问一个节点的子节点,可以通过枚举子节点的父节点来实现,也可以通过索引来访问子节点。另外,还定义了获取节点索引的方法和获取一个节点包含的子节点数目的方法。
上面列出的最后两个方法用来确定一个节点是文件夹,还是树叶。
开发人员很少直接实现TreeNode接口,这是因为Swing在DefaultMutableTreeNode类中提供了TreeNode接口的一个常用的缺省实现。数目众多的树节点扩展了DefaultMutableTreeNode。
2.2 MutableTreeNode接口
MutableTreeNode接口扩展TreeNode,它除了定义指定用户对象的方法外,还定义了修改一个节点的父节点和子节点的方法。表3总结了MutableNode接口。
表3MutableTreeNode接口
public abstract void insert(MutableTreeNode child,int index)
public abstract void remove(int index)
public abstract void remove(MutableTreeNode child)
public abstract void removeFromParent()
public abstract void setParent(MutableTreeNode)
public abstract void setUserObject(Object)
上面列出的第一组方法用来插入和删除子节点,子节点可以通过索引或引用来删除。removeFromParent方法用来将节点从父节点中删除,并更新父节点的子节点数目。
上面列出的最后两个方法用来设置一个节点的父节点和用户对象。需要注意的是,MutableTreeNode继承了getParent方法。
2.3 DefaultMutableTreeNode类
在实际应用中,很少直接实现MutableTreeNode接口,这是因为Swing以DefaultMutableTreeNode类的形式提供了一个合理又强大的MutableTreeNode接口的实现。
3.编辑树
详细代码见TreeEditTest.java。
JTree类使用对象的路径(树路径)来定位要处理的结点。一个树路径从根节点开始,由一个子结点序列构成。
3.1获得结点路径
TreePath类管理着一个Object引用序列。当拥有一个树路径时,通常只需要知道其终端结点,该结点可以通过getLastPathComponent方法得到。
TreePath selectionPath = tree.getSelectionPath();
DefaultMutableTreeNode selectedNode1 =
(DefaultMutableTreeNode) selectionPath .getLastPathComponent();
或者通过下面方法可立即返回给定的结点。
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
3.2编辑结点
在获得选定的结点后,不能通过如下方法来进行编辑。
selectedNode.add(newNode);//error
因为这样只是改变树模型,而相关的视图却没有被通知到。可以使用DefaultTreeModel类的insertNodeInto方法。
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode
.getParent();
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(
"New");
int selectedIndex = parent.getIndex(selectedNode);
model.insertNodeInto(newNode, parent, selectedIndex + 1);
3.3视图显示
当视图接收到结点结构被改变的通知时,它会更新显示树的视图,但是不会自动展开某个结点以展示新添加的子结点。
可以使用JTree类中的makeVisible方法来实现这个目的。makeVisible方法通过一个树路径让某个结点变成可视的。
TreeNode[] nodes = model.getPathToRoot(newNode);
TreePath path = new TreePath(nodes);
tree.makeVisible(path);
如果树是放在一个滚动面板里面,则调用。
TreeNode[] nodes = model.getPathToRoot(newNode);
TreePath path = new TreePath(nodes);
tree.scrollPathToVisible(path);
4.查找树
详细代码见ClassTree.java。
有时候需要遍历所有子结点来找到相匹配的结点。DefaultMutableTreeNode类提供广度优先和深度优先遍历方法,分别是breadthFirstEnumeration方法和depthFirstEnumeration方法。
public DefaultMutableTreeNode findUserObject(Object obj) {
// find the node containing a user object
Enumeration e = root.breadthFirstEnumeration();
while (e.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) e
.nextElement();
if (node.getUserObject().equals(obj))
return node;
}
return null;
}
5.绘制结点
详细代码见ClassTree.java。
可以使用下面方式来制定树构件结点的外观。
使用DefaultTreeCellRenderer改变图标、字体以及背景颜色。这些设置针对所有结点。
tree = new JTree(model);
...
DefaultTreeCellRenderer renderer=new DefaultTreeCellRenderer();
renderer.setLeafIcon(new ImageIcon(“1.gif“))
renderer.setClosedIcon(new ImageIcon(“2.gif“));
renderer.setOpenIcon(new ImageIcon(“3.gif“));
tree.setCellRenderder(renderer);
可以通过实现TreeCellRenderer接口中的
Component getTreeCellRendererComponent(JTree tree, Object value,boolean selected, boolean expanded, boolean leaf, int row,boolean hasFocus)
方法,来针对特定的结点修改。该方法返回的是this,换句话说,就是一个标签。(DefaultTreeCellRenderer继承自JLabel类。)
下面的代码,通过反射API得到被处理的类,如果该类是静态类,则将显示斜体。
class ClassNameTreeCellRenderer extends DefaultTreeCellRenderer {
private Font plainFont = null;
private Font italicFont = null;
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded,leaf, row, hasFocus);
// get the user object
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Class c = (Class) node.getUserObject();
// the first time, derive italic font from plain font
if (plainFont == null) {
plainFont = getFont();
// the tree cell renderer is sometimes called with a label that has
// a null font
if (plainFont != null)
italicFont = plainFont.deriveFont(Font.ITALIC);
}
// set font to italic if the class is abstract, plain otherwise
if ((c.getModifiers() & Modifier.ABSTRACT) == 0)
setFont(plainFont);
else
setFont(italicFont);
return this;
}
本文出自 “子 孑” 博客http://zhangjunhd.blog.51c...
Swing树使用人们所熟悉的文件夹和树叶图来显示分层的数据。树由节点组成,节点可以是文件夹,也可以是树叶。文件夹可以有子节点,除根节点之外的所有节点都只有一个父节点。空的文件夹与树叶的不同之处就在于它允许有子节点。
除父节点和子节点外,树的节点还有一个用户对象(当使用DefaultTreeModel时就会呈现一个用户对象)。用户对象是Object类型,因此它提供了一个将任意对象与节点相关联的办法。
树有一个简单的模型,每一个JTree实例都要维护对绘制器和编辑器的引用,这个绘制器和编辑器被树中所有的节点所使用。表1中列出了swing.tree包中的主要类。
表1 Swing.tree包中的主要类
名 称 实 现
DefaultMutableTreeNode 一个具有一个父节点、(可能)许多子节点和 一个用户对象的可变节点,为相关联的节点提供了访问方法。如果没有任何子节点,这个节点就是树叶。
DefaultTreeModel 一个激发TreeModel Events事件的简单可变的模型。提供对子节点的访问方法,但不是提供对父节点的访问方法。
DefaultTreeCellEditor 绘制器和编辑器的包装器,它把一个“真正”的编辑器组件放在节点图标的旁边。
DefaultTreeCellRenderer 具有字体、颜色和图标访问方法的JLabel扩 展,它提供图标的缺省值。
TreePath 由一个节点到另一个节点的路径。路径中的节点存储在一个数组中。路径用于在选取内容之间进行通信。
1.构建树模型
详细代码见SimpleTree.java
DefaultMutableTreeNode root = new DefaultMutableTreeNode("World");
DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");
root.add(country);
。。。
JTree tree = new JTree(root);
Container contentPane = getContentPane();
contentPane.add(new JScrollPane(tree));
这些代码来自一个JFrame的构造子中。这里通过JTree来创建一个TreeModel的实例。
2.树结点
树节点由TreeNode接口定义,TreeNode接口被MutableTreeNode接口扩展,而MutableTreeNode接口又由 DefaultMutableTreeNode类来实现。
树结构详细类图
2.1 TreeNode接口
TreeNode接口定义了(固定)树节点的实质,表2总结了TreeNode相关方法。
表2TreeNode接口
public abstract Enumeration children()
public abstract TreeNode getParent()
public abstract TreeNode getChildAt(int)
public abstract int getChildCount()
public abstract int getIndex(TreeNode)
public abstract abstract boolean getAllowsChildren()
public abstract boolean isLeaf()
上面列出的前两组方法是对一个节点的父节点和子节点的访问方法。访问一个节点的子节点,可以通过枚举子节点的父节点来实现,也可以通过索引来访问子节点。另外,还定义了获取节点索引的方法和获取一个节点包含的子节点数目的方法。
上面列出的最后两个方法用来确定一个节点是文件夹,还是树叶。
开发人员很少直接实现TreeNode接口,这是因为Swing在DefaultMutableTreeNode类中提供了TreeNode接口的一个常用的缺省实现。数目众多的树节点扩展了DefaultMutableTreeNode。
2.2 MutableTreeNode接口
MutableTreeNode接口扩展TreeNode,它除了定义指定用户对象的方法外,还定义了修改一个节点的父节点和子节点的方法。表3总结了MutableNode接口。
表3MutableTreeNode接口
public abstract void insert(MutableTreeNode child,int index)
public abstract void remove(int index)
public abstract void remove(MutableTreeNode child)
public abstract void removeFromParent()
public abstract void setParent(MutableTreeNode)
public abstract void setUserObject(Object)
上面列出的第一组方法用来插入和删除子节点,子节点可以通过索引或引用来删除。removeFromParent方法用来将节点从父节点中删除,并更新父节点的子节点数目。
上面列出的最后两个方法用来设置一个节点的父节点和用户对象。需要注意的是,MutableTreeNode继承了getParent方法。
2.3 DefaultMutableTreeNode类
在实际应用中,很少直接实现MutableTreeNode接口,这是因为Swing以DefaultMutableTreeNode类的形式提供了一个合理又强大的MutableTreeNode接口的实现。
3.编辑树
详细代码见TreeEditTest.java。
JTree类使用对象的路径(树路径)来定位要处理的结点。一个树路径从根节点开始,由一个子结点序列构成。
3.1获得结点路径
TreePath类管理着一个Object引用序列。当拥有一个树路径时,通常只需要知道其终端结点,该结点可以通过getLastPathComponent方法得到。
TreePath selectionPath = tree.getSelectionPath();
DefaultMutableTreeNode selectedNode1 =
(DefaultMutableTreeNode) selectionPath .getLastPathComponent();
或者通过下面方法可立即返回给定的结点。
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
3.2编辑结点
在获得选定的结点后,不能通过如下方法来进行编辑。
selectedNode.add(newNode);//error
因为这样只是改变树模型,而相关的视图却没有被通知到。可以使用DefaultTreeModel类的insertNodeInto方法。
DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode
.getParent();
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(
"New");
int selectedIndex = parent.getIndex(selectedNode);
model.insertNodeInto(newNode, parent, selectedIndex + 1);
3.3视图显示
当视图接收到结点结构被改变的通知时,它会更新显示树的视图,但是不会自动展开某个结点以展示新添加的子结点。
可以使用JTree类中的makeVisible方法来实现这个目的。makeVisible方法通过一个树路径让某个结点变成可视的。
TreeNode[] nodes = model.getPathToRoot(newNode);
TreePath path = new TreePath(nodes);
tree.makeVisible(path);
如果树是放在一个滚动面板里面,则调用。
TreeNode[] nodes = model.getPathToRoot(newNode);
TreePath path = new TreePath(nodes);
tree.scrollPathToVisible(path);
4.查找树
详细代码见ClassTree.java。
有时候需要遍历所有子结点来找到相匹配的结点。DefaultMutableTreeNode类提供广度优先和深度优先遍历方法,分别是breadthFirstEnumeration方法和depthFirstEnumeration方法。
public DefaultMutableTreeNode findUserObject(Object obj) {
// find the node containing a user object
Enumeration e = root.breadthFirstEnumeration();
while (e.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) e
.nextElement();
if (node.getUserObject().equals(obj))
return node;
}
return null;
}
5.绘制结点
详细代码见ClassTree.java。
可以使用下面方式来制定树构件结点的外观。
使用DefaultTreeCellRenderer改变图标、字体以及背景颜色。这些设置针对所有结点。
tree = new JTree(model);
...
DefaultTreeCellRenderer renderer=new DefaultTreeCellRenderer();
renderer.setLeafIcon(new ImageIcon(“1.gif“))
renderer.setClosedIcon(new ImageIcon(“2.gif“));
renderer.setOpenIcon(new ImageIcon(“3.gif“));
tree.setCellRenderder(renderer);
可以通过实现TreeCellRenderer接口中的
Component getTreeCellRendererComponent(JTree tree, Object value,boolean selected, boolean expanded, boolean leaf, int row,boolean hasFocus)
方法,来针对特定的结点修改。该方法返回的是this,换句话说,就是一个标签。(DefaultTreeCellRenderer继承自JLabel类。)
下面的代码,通过反射API得到被处理的类,如果该类是静态类,则将显示斜体。
class ClassNameTreeCellRenderer extends DefaultTreeCellRenderer {
private Font plainFont = null;
private Font italicFont = null;
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded,leaf, row, hasFocus);
// get the user object
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Class c = (Class) node.getUserObject();
// the first time, derive italic font from plain font
if (plainFont == null) {
plainFont = getFont();
// the tree cell renderer is sometimes called with a label that has
// a null font
if (plainFont != null)
italicFont = plainFont.deriveFont(Font.ITALIC);
}
// set font to italic if the class is abstract, plain otherwise
if ((c.getModifiers() & Modifier.ABSTRACT) == 0)
setFont(plainFont);
else
setFont(italicFont);
return this;
}
本文出自 “子 孑” 博客http://zhangjunhd.blog.51c...
发表评论
-
Java中HashMap的用法
2012-04-10 11:31 1089import java.util.Map; import ... -
Eclipse-jee-galileo的简单应用配置(包含Tomcat)
2012-03-23 17:43 1首先:下载 JDK 6,Eclip ... -
JDK官方下载
2011-11-27 22:54 854JDK1.6官方下载_JDK6官方下载地址:http:// ... -
使用Servlet Filter来防止SQL注入的方法
2010-08-28 14:29 1820SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的B ... -
避免XPath 注入的危险
2010-08-28 14:27 1448随着简单 XML API、Web 服 ... -
Xpath注入攻击及其防御技术研究
2010-08-28 14:25 13791 Xpath注入攻击概述 1.1 Xpath定义 近 ... -
突破SQL注入限制的一点想法
2010-08-28 14:19 1052突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察 ... -
JPanel上设置背景图片
2010-08-28 14:12 1495import java.awt.*; import javax ... -
通过Java Swing看透MVC设计模式
2010-08-28 14:11 961一个好的用户界面(GUI) ... -
JTabbedPanel的美化标签
2010-08-28 14:09 4515么现在来说下用法吧,首先附上网上找来的一段代码(其实在csdn ... -
jtree 默认展开树的全部节点
2010-08-28 14:06 5680public static void expandTr ... -
jTree 背景图片.节点颜色
2010-08-28 14:05 1606import java.awt.*; import java. ... -
JTree用法
2010-08-28 14:04 1289一、JTree用法及JTree使用经验总结 import ja ... -
常用的数据库连接写法和下载地址
2010-08-28 14:01 8801. MySQL(http://www.mysql.com)m ... -
java中常见的日期时间类
2010-08-28 13:20 812java中常见的日期时间类 以及时间转换 java中常见的 ... -
计算任意2个日期内的工作日(没有考虑到国定假日
2010-08-28 13:08 1094主要思路: 对于任意2个日期比如:date_start=20 ... -
Java获取各种常用时间方法
2010-08-28 13:07 720http://gigixin.iteye.com/blog/4 ... -
计算从beginDate到endDate的工作日
2010-08-28 13:06 1488public static int[] work_rest_a ... -
Java时间格式转换大全
2010-08-28 13:05 549import java.text.*; import java ... -
JAVA计划任务 定时器
2010-08-28 12:57 1391所有类型的 Java 应用程序一般都需要计划重复执行的任务。企 ...
相关推荐
在Java Swing库中,JTree是一个用于显示和操作树形数据结构的视图组件。这个“Swing-JTree.rar”文件包含了一个关于JTree的经典示例,名为“jtree树案例”,这将帮助我们更好地理解和使用这个组件。 JTree的主要...
在Java的Swing库中,JTree是一个非常重要的组件,用于展示树形数据结构。它提供了用户友好的界面,使得用户可以浏览和操作层次化的数据。这篇博客文章“所支持拖拽功能的Swing-JTree代码”探讨了如何增强JTree的功能...
本篇“JAVA中的Swing的JTree操作的宝典”将深入探讨如何进行树节点的增加、删除、修改和查询操作,帮助开发者更好地掌握JTree的高级用法。 1. **创建JTree** 创建JTree时,通常需要一个DefaultTreeModel或者自定义...
JavaSwing 中的 JTree 模型是一种树形结构的展示方式,使用人们所熟悉的文件夹和树叶图来显示分层的数据。树由节点组成,节点可以是文件夹,也可以是树叶。文件夹可以有子节点,除根节点之外的所有节点都只有一个父...
在Java编程中,`JTree`是...总之,`JTree`是Java Swing中不可或缺的一部分,它为展示和操作层次化数据提供了强大而灵活的工具。通过深入学习和实践,开发者可以构建出功能丰富的图形用户界面,满足各种业务场景的需求。
总结来说,Java Swing的JTree组件是展示和操作层次数据的关键工具。掌握它的创建、显示、节点操作和编辑功能对于任何Java GUI开发者来说都是必要的。通过实例学习和实践,可以更好地理解和应用JTree在实际项目中的...
5. **模型-视图-控制器(MVC)**:Swing组件遵循MVC设计模式,使得代码结构清晰,易于维护。 6. **可定制性(Customizability)**:Swing组件可以通过继承和覆盖方法进行自定义,以满足特定需求。 7. **国际化...
总的来说,本文深入探讨了Swing中线程管理和异步模型的使用,特别是针对`JTable`和`JTree`组件,旨在帮助开发者构建高效、响应迅速的Swing应用程序。通过理解和运用这些技巧,开发者能够创建出即使在处理大量数据或...
DOM是一种将XML文档加载到内存中形成树形结构的模型,方便开发者通过节点操作来访问和修改XML数据。 首先,我们来看DOM解析。通过`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`,我们可以创建一...
此外,可能还会涉及Swing的模型-视图-控制器(MVC)架构,以及如何自定义组件。 4. **ch5**:最后的章节可能涉及到Swing的高级主题,如国际化(i18n)、SwingWorker用于后台任务处理,以及如何使用LookAndFeel来...
在"Swing展示的文件系统树"这个主题中,我们将深入探讨如何使用`JTree`来创建一个动态显示文件系统的视图。 首先,`JTree`是`javax.swing`包的一部分,它继承自`JComponent`,并实现了`Scrollable`接口,因此可以...
它允许用户浏览、选择和操作树形结构中的节点。JTree可以动态加载数据,支持节点的展开、折叠、选择和拖放操作,使得用户能方便地探索复杂的数据结构。 【Hibernate】 Hibernate是一个流行的开源对象关系映射(ORM...
1. **轻量级组件**:Swing组件是基于Java而不是操作系统,因此具有更好的跨平台兼容性。 2. **可定制性**:Swing组件提供了许多内置的外观和行为,同时允许自定义外观(LookAndFeel)和行为。 3. **事件处理**:...
#### (十一) Java Swing中的JTree模型 **Swing.tree包中的主要类名称实现** - **构建树模型**:使用`TreeModel`接口及其子类来构建树模型。 - **树结点**:通过`TreeNode`接口定义树节点的行为。 - **TreeNode接口...
在Java Swing库中,`JTree`是一个非常重要的组件,用于显示和操作树形数据结构。这个例子展示了如何实现一个可拖动节点的`JTree`,这在用户界面设计中是一个常见且实用的功能,特别是在需要展示层次结构信息时。`...
在描述中提到的“java Swing带复选框的树”,即在JTree的基础上增加了复选框功能,允许用户对树结构中的节点进行多选操作,这样的设计常见于文件管理器或配置设置界面。 复选框树的实现主要涉及到以下几个关键知识...
在Swing中,数据模型是一个关键概念,它将数据和用户界面的表示分离开来,使得代码更易于管理和维护。以下是关于"Java Swing数据模型"的详细解释: 1. **Swing 数据模型分类**: - **表示应用程序的数据**: - `...
在Java编程领域,JTree是Swing库中的一个...总之,JTree是Java Swing中一个强大的组件,它使得在图形用户界面中展示和操作树形数据变得简单直观。通过熟练掌握JTree的使用,开发者可以构建出更加灵活和用户友好的应用。
- **TreeModel**:`javax.swing.tree.TreeModel`接口定义了树数据的模型,负责管理节点数据和结构。 - **TreeCellRenderer**:渲染树节点的外观,可以通过自定义实现来改变节点的显示样式。 - **...