JTree

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

               

            }

           

     });


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值