java的JTree的使用方法,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的JTree的使用方法,相关的知识,希望对你有一定的参考价值。
最好菜单的选项也一样,谢谢了
菜单中菜单项要一样(实现代码)。 还有上面参数管理员和系统管理员可以来回切换(在同一个窗体实现)。
JTree组件被用来以树的形式显示数据,一层套一层,看起来清晰明了,使用户很方便地就了解到各个节点之间的层次关系,可以很容易地找到相关的数据。
例如 Windows 系统的文件管理器,它就是一个典型的树层次结构。
JTree的构造函数:
·JTree() 建立一棵默认的树。
·JTree(Hashtable data) 利用Hashtable建立树。
·JTree(Object[] data) 利用数组建立树。
·JTree(TreeModel model) 利用TreeModel建立树。
·JTree(TreeNode root) 建立以root为根的树。
·JTree(TreeNode root,Boolean children) 建立以 root 为根的树,并设定是否允许有子节点。
·JTree(Vector value) 利用Vector建立树。
使用一个JTree可以简单地像下面这样表示:
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
public class TreeDemo
public static void main(String[] args)
// 创建没有父节点和子节点、但允许有子节点的树节点,并使用指定的用户对象对它进行初始化。
// public DefaultMutableTreeNode(Object userObject)
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("软件部");
node1.add(new DefaultMutableTreeNode(new User("小花")));
node1.add(new DefaultMutableTreeNode(new User("小虎")));
node1.add(new DefaultMutableTreeNode(new User("小龙")));
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("销售部");
node2.add(new DefaultMutableTreeNode(new User("小叶")));
node2.add(new DefaultMutableTreeNode(new User("小雯")));
node2.add(new DefaultMutableTreeNode(new User("小夏")));
DefaultMutableTreeNode top = new DefaultMutableTreeNode("职员管理");
top.add(new DefaultMutableTreeNode(new User("总经理")));
top.add(node1);
top.add(node2);
final JTree tree = new JTree(top);
JFrame f = new JFrame("JTreeDemo");
f.add(tree);
f.setSize(300, 300);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 添加选择事件
tree.addTreeSelectionListener(new TreeSelectionListener()
@Override
public void valueChanged(TreeSelectionEvent e)
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
if (node == null)
return;
Object object = node.getUserObject();
if (node.isLeaf())
User user = (User) object;
System.out.println("你选择了:" + user.toString());
);
class User
private String name;
public User(String n)
name = n;
// 重点在toString,节点的显示文本就是toString
public String toString()
return name;
参考技术A package com.baiduwork;
import java.awt.*;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.JFrame;
//定义个Jtree继承框架。
public class Jtree extends JFrame
private DefaultMutableTreeNode root, red, green, blue;
private JTree jtree1;
private JPanel jpanel1;
private JFrame frame;
Jtree()
super();
initilize();
//初始化。
public void initilize()
frame = new JFrame("Jtree");
root = new DefaultMutableTreeNode("Color");
red = new DefaultMutableTreeNode("red");
blue = new DefaultMutableTreeNode("green");
green = new DefaultMutableTreeNode("green");
root.add(red);
root.add(blue);
root.add(green);
jtree1 = new JTree(root);
jpanel1 = new JPanel();
JSplitPane jsplitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
jtree1, jpanel1);
jsplitpane.setOneTouchExpandable(true);
jsplitpane.setMinimumSize(new Dimension(100, 50));
frame.getContentPane().add(jsplitpane);
frame.setSize(600, 500);
frame.setLocation(50, 50);
frame.setVisible(true);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
public static void main(String[] args)
new Jtree();
例子。追问
能不能实现这个。我把图上传错了
追答你就 添加些节点么。。。把节点名 改一下就好了。设置下节点可选。
本回答被提问者采纳 参考技术B 网上有很多样例。搜一下就有追问我找了。很难找。能帮忙做下吗?代码用txt发到我邮箱:yaolei@jla.com.cn
在 Java GUI 中更新 JTree
【中文标题】在 Java GUI 中更新 JTree【英文标题】:updating JTree in java GUI 【发布时间】:2011-04-18 19:38:16 【问题描述】:我在我的 GUI 中使用了 JTree 并将其添加到 JFrame。当我想更新它并在程序的另一部分更改它的节点时(在程序运行时,作为执行的操作),我尝试添加新节点或删除节点;但是我的界面没有改变。请给我一个解决方案。
问候
【问题讨论】:
【参考方案1】:您需要确保在更新模型后指示它触发一个事件,以使所有已注册的侦听器都收到该事件的通知。其中一位听众是JTree
,在收到事件后它将重新绘制。
例如,DefaultTreeModel
包含方法:
nodeChanged
nodesChanged
nodeStructureChanged
nodesWereInserted
nodesWereRemoved
此外,与所有 Swing 编程一样,您需要确保在 Event Dispatch Thread 上更新模型。
【讨论】:
您不必自己触发这些事件。您所要做的就是通过调用insertNodeInto
方法来更新模型,例如,让模型负责向 TreeModelListeners 触发事件。
好点,虽然在某些情况下最好自己管理。例如,如果我想添加 1000 个子节点,我不希望触发 1000 个“添加节点”事件。
谢谢先生!但是你提到的这些方法是私有的,无法访问。
你说得对!我已更改答案以反映您应该调用的正确公共方法。【参考方案2】:
您的意思是 GUI 方面只是没有显示您的更改吗?你可能应该看看 int repaint()
和 revalidate().
Here's 很好地描述了何时调用哪个。
【讨论】:
是的,调用这个方法是必要的。 -1,不需要 repaint() 和 revalidate()。当您更新模型时,模型负责通知视图更改,以便树可以重新绘制自己。【参考方案3】:除了 insertNodeInto 建议,您还可以使用:
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot();
root.add(new DefaultMutableTreeNode("another_child"));
model.reload(root);
【讨论】:
感谢您的宝贵回答!每次我想更新我的树时,我都会使用这种方法。 这会起作用,但在处理大树时是一种“蛮力”方法。例如,如果我要循环并将 1000 个节点添加到已经包含 50,000 个项目的树中,这将非常低效。 在野外,树多久变大到足以让这变得慢到可以担心的频率?以上是关于java的JTree的使用方法,的主要内容,如果未能解决你的问题,请参考以下文章