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事件时,valueChangedTreeSelectionEvent e)将被触动,通过JTreegetSelectionPaths方法可以获得所有选中节点的路径,该方法返回一个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.       删除树节点:DefaultTreeModelremoveNodeFromParent()方法;

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自动生成的方法存根

               

            }

           

     });

	
				
		
原创粉丝点击