JTree
来源:互联网 发布:python interfaceerror 编辑:程序博客网 时间:2024/05/14 07:09
import java.awt.Dimension;import javax.swing.BoxLayout;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;public class JTreeTest extends JFrame{/** * 描述:<描述函数的功能>。 《br》 *<p> * @param args */public JTreeTest(){//无参数的构造函数JTree exam1 = new JTree();//JTree(Object[] value) String[] str = {"A","B","C","D","E","F"};JTree exam2 = new JTree(str);// 构造函数:JTree(TreeNode root)(TreeNode空)// 用空结点创建树 DefaultMutableTreeNode dmt = new DefaultMutableTreeNode();JTree exam3 = new JTree(dmt); // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空) // 用一个根结点创建树 DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Color");JTree exam4 = new JTree(node2);// 构造函数:JTree(TreeNode root, boolean asksAllowsChildren)(同上,只是TreeNode又有不同)// 使用DefaultMutableTreeNode类先用一个根结点创建树,设置为可添加孩子结点,再添加孩子结点 DefaultMutableTreeNode color = new DefaultMutableTreeNode("Color");DefaultMutableTreeNode red = new DefaultMutableTreeNode("red");color.add(red);color.add(new DefaultMutableTreeNode("Gray"));red.add(new DefaultMutableTreeNode("Light"));red.add(new DefaultMutableTreeNode("yang"));JTree exam5 = new JTree(color); // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空) // 通过逐个添加结点创建树 DefaultMutableTreeNode biology = new DefaultMutableTreeNode("Biology");DefaultMutableTreeNode animal = new DefaultMutableTreeNode("animal");DefaultMutableTreeNode mammal = new DefaultMutableTreeNode("mammal");DefaultMutableTreeNode horse = new DefaultMutableTreeNode("horse");mammal.add(horse);animal.add(mammal);biology.add(animal);JTree exam6 = new JTree(biology);// 构造函数:JTree(TreeModel newModel)// 用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode// 创建一个树的模型,再用JTree的构造函数创建一个树 DefaultMutableTreeNode biology1 = new DefaultMutableTreeNode("Biology");DefaultMutableTreeNode animal1 = new DefaultMutableTreeNode("animal");DefaultMutableTreeNode mammal1 = new DefaultMutableTreeNode("mammal");DefaultMutableTreeNode horse1 = new DefaultMutableTreeNode("horse");biology1.add(animal1);animal1.add(mammal1);mammal1.add(horse1);DefaultTreeModel model = new DefaultTreeModel(biology1);JTree exam7 = new JTree(model);JPanel panel = new JPanel();panel.setLayout(new BoxLayout(panel,BoxLayout.X_AXIS));panel.setPreferredSize(new Dimension(700,400));panel.add(new JScrollPane(exam1));panel.add(new JScrollPane(exam2));panel.add(new JScrollPane(exam3));panel.add(new JScrollPane(exam4));panel.add(new JScrollPane(exam5));panel.add(new JScrollPane(exam6));panel.add(new JScrollPane(exam7));setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setContentPane(panel);setVisible(true);}public static void main(String[] args) {// TODO 自动生成的方法存根new JTreeTest();}}
一.Swing树组件
1. 简单的树:
构造函数
JTree()
JTree(TreeNode )
JTree(TreeModel newmodel);
DefaultMutableTreeNode类实现了TreeNode接口,用来创建树的节点;其中的add方法可以添加节点;
DefaultTreeModel 实现了TreeModel接口;仅提供了两个构造方法,必须直接指定树的根节点
panel.add(new JScrollPane(exam1));树放在JScrollPane上;
2.
二.处理节点中的事件
1. 树的选择模式通过TreeSelectionModel类的对象可以设置树的选择模式,可以通过JTree类的getSelectionModel方法获得这个对象,并且通过setSelectionModel来设置模式;
2. 选中节点和取消节点的选中状态时,将发出TreeSelectionEvent事件,通过实现TreeSelectionListener接口可以捕获该事件。
3. 当捕获TreeSelectionEvent事件时,valueChanged(TreeSelectionEvent e)将被触动,通过JTree的getSelectionPaths方法可以获得所有选中节点的路径,该方法返回一个TreePath路径的数据;通过getselectionPath可以获得索引值最小的节点路径;isSelectionEmpty()获得查看是否存在选中节点;getSelectionCount可以获得选中节点的个数;
4. TreePath的常用方法:
getPath();
getLastPath();
getParentPath();
pathByAddingChild();
getPathCount();
getPathComponent(int elemnt);
三.遍历树的节
DefaultMutableTreeNode 提供了两组相对的遍历方式,第一组:前序和后续遍历:preorderEnumeration()遍历和postorderEnumeration来获得遍历的枚举对象;
第二组:广度和深度优先遍历:广度:breathFirstEnumeration(); depthFirstEnumeration()遍历;DefaultMutableTreeNode其他的常用方法:
getLevel(); getDepth(); getParent(); getChildCount(); getFirstChild(); getSiblingCount(); getNextSibling(); getPreviousSibling(); getPath() isRoof() isLeaf();
Enumeration enu = color.preorderEnumeration();
while(enu.hasMoreElements()){
DefaultMutableTreeNode dm = (DefaultMutableTreeNode)enu.nextElement();
System.out.println(dm.getUserObject());
}
四.定制树:
1. 树的根节点是否显示:setRootVisible();
2. 树根节点前的手柄是否显示:setShowsRootHandles();
3. 节点图标设置:DefaultTreeCellRenderer可以改变节点图标,通过JTree类的getCellRenderer()方法获得该对象;
setLeafIcon()
setCloseIcon();
setOpenIcon() 处于打开状态时采用的图标;
4. 树节点之间连线的设置:
PutClientProperty();
5. 展开节点:
Tree.expandPath()
五.维护树模型:
1. 添加树节点:DefaultTreeModel方法的InsertNodeInto()方法;也可以直接用节点方法
2. 修改树节点:DefaultTreeModel的 nodeChanged方法;
3. 删除树节点:DefaultTreeModel的removeNodeFromParent()方法;
but1.addActionListener(new ActionListener(){
@Override
publicvoid actionPerformed(ActionEvent arg0) {
//TODO自动生成的方法存根
DefaultMutableTreeNode node =new DefaultMutableTreeNode(text1.getText());
TreePath path = exam5.getSelectionPath();
DefaultMutableTreeNode par = (DefaultMutableTreeNode)path.getLastPathComponent();
par.insert(node, par.getChildCount());
}
});
修改节点实现:node.setUserObject(text.getText());
treeModel.nodeChanged();
六.处理展开节点事件
1. 展开和折叠节点时,将发出TreeExpansionEvent事件;将要被展开或折叠和已经展开和折叠的事件
exam5.addTreeWillExpandListener(new TreeWillExpandListener(){
@Override
publicvoid treeWillCollapse(TreeExpansionEvent event)
throws ExpandVetoException {
//TODO自动生成的方法存根
}
@Override
publicvoid treeWillExpand(TreeExpansionEvent event)
throws ExpandVetoException {
//TODO自动生成的方法存根
}
});
exam5.addTreeExpansionListener(new TreeExpansionListener(){
@Override
publicvoid treeCollapsed(TreeExpansionEvent arg0) {
//TODO自动生成的方法存根
}
@Override
publicvoid treeExpanded(TreeExpansionEvent arg0) {
//TODO自动生成的方法存根
}
});
- jtree
- JTree
- JTree
- JTree
- JTree
- JTree
- JTree
- JTree
- JTree
- JTree
- JTree
- 使用JTree
- jtree问题
- JTree Demo
- Swing JTree
- JTree简介
- JTree刷新
- JTree总结
- Can not be copied
- 在一个字符串中找到第一个只出现一次的字符
- Sql Server 汉字转拼音(无数据表版)
- spring机制分析(1)
- HTTP 相应头相关
- JTree
- 团队合影
- 比较好的网
- 小圈子.大社交:利用圈子引爆流行
- JAVA中的同步和异步
- 一个理解js动态创建节点并注册事件及传递参数的例子
- 【木头Cocos2d-x 008】在Lua中使用自定义类——tolua++工具使用(下集)
- Oracle提示错误消息ORA-28001: the password has expired
- EL表达式不起作用2。