詳解Swing中JTree組件的功能
JTree組件是另外一個復(fù)雜組件,它不像 JTable 那樣難用,但是也不像 JList 那么容易。使用 JTree 時麻煩的部分是它要求的數(shù)據(jù)模型。
JTree組件的功能來自樹的概念,樹有分支和葉子。您在 Windows 中使用 IE 瀏覽器時,可能非常熟悉這個概念 —— 可以展開和折疊分支,顯示可以選擇和取消選擇的不同葉子。
您很有可能發(fā)現(xiàn)樹在應(yīng)用程序中不像表格或列表那樣有用,所以在 Internet 上沒有許多有幫助的這方面的示例。實際上,像 JTable 一樣,JTree 沒有什么入門級的功能。如果決定使用 JTree,那么立即就可以達到中級水平,當(dāng)然還必須學(xué)習(xí)隨之而來的概念。因此,示例應(yīng)用程序沒有介紹 JTree,所以也很不幸,不管是入門教程還是中級教程,都沒有涉及這個不太流行的組件。
但是,樹有一些時候是符合需求的合理的 UI 組件。文件/目錄系統(tǒng)就是一個示例(就像在 IE 瀏覽器中那樣),而且當(dāng)數(shù)據(jù)采取層次結(jié)構(gòu)的時候,也就是說數(shù)據(jù)采用樹的形式的時候,JTree組件就是***組件。
在 Swing 中,JTree組件看起來如下所示:
- import java.awt.Dimension;
- import java.awt.Color;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTree;
- import javax.swing.BoxLayout;
- import javax.swing.tree.TreePath;
- import javax.swing.tree.DefaultMutableTreeNode;
- import javax.swing.tree.DefaultTreeModel;
- public class JTreeDemo
- {
- public static void main (String[] args)
- {
- //構(gòu)造函數(shù):JTree()
- JTree example1 = new JTree();
- //構(gòu)造函數(shù):JTree(Object[] value)
- Object[] letters= {"a", "b", "c", "d", "e"};
- JTree example2 = new JTree (letters);
- //構(gòu)造函數(shù):JTree(TreeNode root)(TreeNode空)
- //用空結(jié)點創(chuàng)建樹
- DefaultMutableTreeNode node1 = new DefaultMutableTreeNode();
- //定義樹結(jié)點
- JTree example3 = new JTree (node1);
- //用此樹結(jié)點做參數(shù)調(diào)用 JTree的構(gòu)造函數(shù)創(chuàng)建含有一個根結(jié)點的樹
- //構(gòu)造函數(shù):JTree(TreeNode root)(同上,只是TreeNode非空)
- //用一個根結(jié)點創(chuàng)建樹
- DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Color");
- JTree example4 = new JTree (node2);//結(jié)點不可以顏色,默認(rèn)為白面黑字
- example4.setBackground (Color.lightGray);
- //構(gòu)造函數(shù):JTree(TreeNode root, boolean asksAllowsChildren)
(同上,只是TreeNode又有不同)- //使用DefaultMutableTreeNode類先用一個根結(jié)點創(chuàng)建樹,
設(shè)置為可添加孩子結(jié)點,再添加孩子結(jié)點- DefaultMutableTreeNode color = new DefaultMutableTreeNode
("Color", true);- DefaultMutableTreeNode gray = new DefaultMutableTreeNode
("Gray");- color.add (gray);
- color.add (new DefaultMutableTreeNode ("Red"));
- gray.add (new DefaultMutableTreeNode ("Lightgray"));
- gray.add (new DefaultMutableTreeNode ("Darkgray"));
- color.add (new DefaultMutableTreeNode ("Green"));
- JTree example5 = new JTree (color);
- //構(gòu)造函數(shù):JTree(TreeNode root)(同上,只是TreeNode非空)
- //通過逐個添加結(jié)點創(chuàng)建樹
- 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 example6 = new JTree (biology);
- horse.isLeaf();//if this node allows children.
- horse.isRoot();//true if this node is the root of its tree
- //構(gòu)造函數(shù):JTree(TreeModel newModel)
- //用DefaultMutableTreeNodel類定義一個結(jié)點再用這個結(jié)點做參數(shù)定義一個用DefaultTreeMode
- //創(chuàng)建一個樹的模型,再用JTree的構(gòu)造函數(shù)創(chuàng)建一個樹
- DefaultMutableTreeNode root = new DefaultMutableTreeNode ("Root1");
- DefaultMutableTreeNode child1 = new DefaultMutableTreeNode ("Child1");
- DefaultMutableTreeNode child11 = new DefaultMutableTreeNode ("Child11");
- DefaultMutableTreeNode child111 = new DefaultMutableTreeNode ("Child111");
- DefaultMutableTreeNode child1111 = new DefaultMutableTreeNode ("Child1111");
- root.add (child1); child1.add (child11);
- child11.add (child111);child111.add(child1111);
- DefaultTreeModel model = new DefaultTreeModel (root);
- JTree example7 = 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 (example1));//JTree必須放在JScrollPane上
- panel.add (new JScrollPane (example2));
- panel.add (new JScrollPane (example3));
- panel.add (new JScrollPane (example4));
- panel.add (new JScrollPane (example5));
- panel.add (new JScrollPane (example6));
- panel.add (new JScrollPane (example7));
- JFrame frame = new JFrame ("JTreeDemo");
- frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
- frame.setContentPane (panel);
- frame.pack();
- frame.show();
- }
- }
【編輯推薦】