|
TableDemo frame = new TableDemo(); frame.pack(); frame.setVisible(true); } }
7.2.3.20 树(JTree)
要显示一个层次关系分明的一组数据,用树状图表示能给用户一个直观而易用的感觉,JTree类如同Windows的资源管理器的左半部,通过点击可以"打开"、"关闭"文件夹,展开树状结构的图表数据。JTree也是依据M-V-C的思想来设计的,Jtree的主要功能是把数据按照树状进行显示,其数据来源于其它对象,其显示效果通常如下图所示:

下面是一棵包含六个分枝点的树的例子,来演示JTree的实现过程。
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; class Branch{ DefaultMutableTreeNode r; //DefaultMutableTreeNode是树的数据结构中的通用节点,节点也可以有多个子节点。 public Branch(String[] data){ r=new DefaultMutableTreeNode(data[0]); for(int i=1;i r.add(new DefaultMutableTreeNode(data[i])); //给节点r添加多个子节点 } public DefaultMutableTreeNode node(){//返回节点 return r; } } public class Trees extends JPanel{ String [][]data={ {"Colors","Red","Blue","Green"}, {"Flavors","Tart","Sweet","Bland"}, {"Length","Short","Medium","Long"}, {"Volume","High","Medium","Low"}, {"Temperature","High","Medium","Low"}, {"Intensity","High","Medium","Low"} }; static int i=0; //I用于统计按钮点击的次数 DefaultMutableTreeNode root,child,chosen; JTree tree; DefaultTreeModel model; public Trees(){ setLayout(new BorderLayout()); root=new DefaultMutableTreeNode("root"); //根节点进行初始化 tree=new JTree(root); //树进行初始化,其数据来源是root对象 add(new JScrollPane(tree)); //把滚动面板添加到Trees中 model=(DefaultTreeModel)tree.getModel(); //获得数据对象DefaultTreeModel JButton test=new JButton("Press me"); //按钮test进行初始化 test.addActionListener(new ActionListener(){ //按钮test注册监听器 public void actionPerformed(ActionEvent e){ if (i //按钮test点击的次数小于data的长度 child=new Branch(data[i++]).node(); //生成子节点 chosen=(DefaultMutableTreeNode) //选择child的父节点 tree.getLastSelectedPathComponent(); if(chosen==null) chosen=root; model.insertNodeInto(child,chosen,0); //把child添加到chosen } } }); test.setBackground(Color.blue); //按钮test设置背景色为蓝色 |