JTree的使用

来源:互联网 发布:php遍历二维数组 编辑:程序博客网 时间:2024/05/18 03:28

1.1        JTree深入浅出

 

1.1.1      HashTable构造JTree

package com.jtree;

 

/**

 *

 * <p>Title: HelloWorldJAVA基础</p>

 *

 * <p>Description: JAVA基础</p>

 *

 * <p>Copyright: Copyright (c) 2007</p>

 *

 * <p>Company: HelloWorld of QYSOFT</p>

 *

 * @author 商延涛

 * @version 1.0

 */

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.text.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import java.text.*;

import java.beans.*;

import java.awt.BorderLayout;

import java.awt.Rectangle;

 

/*

 使用JTree组件:

   java.lang.Object

     --java.awt.Component

      --java.awt.Container

       --javax.swing.JComponent

        --javax.swing.JTree

 JTree构造函数:

 JTree():建立一棵系统默认的树。

 JTree(Hashtable value):利用Hashtable建立树,不显示root node(根节点).

 JTree(Object[] value):利用Object Array建立树,不显示root node.

 JTree(TreeModel newModel):利用TreeModel建立树。

 JTree(TreeNode root):利用TreeNode建立树。

 JTree(TreeNode root,boolean asksAllowsChildren):利用TreeNode建立树,并决定是否允许子节点的存在.

 JTree(Vector value):利用Vector建立树,不显示root node.

 

 */

 

public class SimpleTree extends JFrame {

    public SimpleTree() {

        this.setSize(500, 300);

        this.setLocation(150, 150);

        try {

            jbInit();

        } catch (Exception ex) {

            ex.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

        SimpleTree tree = new SimpleTree();

        tree.setVisible(true);

        tree.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private void jbInit() throws Exception {

        String[] s1 = {"公司文件", "个人信件", "私人文件"};

        String[] s2 = {"本机磁盘(C:)", "本机磁盘(D:)", "本机磁盘(E:)"};

        String[] s3 = {"奇摩站", "职棒消息", "网络书店"};

        Hashtable hashtable1 = new Hashtable();

        Hashtable hashtable2 = new Hashtable();

        hashtable1.put("我的公文包", s1);

        hashtable1.put("我的电脑", s2);

        hashtable1.put("收藏夹", hashtable2);

        hashtable2.put("网站列表", s3);

        this.setTitle("测试树");

        this.getContentPane().setLayout(borderLayout1);

        this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        jPanel1.add(jSplitPane1);

        jSplitPane1.add(jScrollPane1, JSplitPane.LEFT);

        jTree1 = new JTree(hashtable1);

        jScrollPane1.getViewport().add(jTree1);

        jSplitPane1.setBounds(new Rectangle(36, 30, 339, 246));

        jPanel1.setLayout(null);

    }

 

    BorderLayout borderLayout1 = new BorderLayout();

    JPanel jPanel1 = new JPanel();

    JSplitPane jSplitPane1 = new JSplitPane();

    JScrollPane jScrollPane1 = new JScrollPane();

    JTree jTree1;

}

1.1.2      TreeTable构造JTree

除了以节点的观念(TreeNode)建立树之外,你可以用data model的模式建立树。树的data model称为TreeModel,用此模式的好处
是可以触发相关的树事件,来处理树可能产生的一些变动。TreeModel是一个interface,里面定义了8种方法;如果你是一个喜欢自己
动手做的人,或是你想显示的数据格式很复杂,你可以考虑直接实作TreeModel界面中所定义的方法来构造出JTree.TreeModel界面
的方法如下所示:
TreeModel方法:
void      addTreeModelListener(TreeModelListener l):增加一个TreeModelListener来监控TreeModelEvent事件。
Object    getChild(Object parent,int index):返回子节点。
int       getChildCount(Object parent):返回子节点数量.
int       getIndexOfChild(Object parent,Object child):返回子节点的索引值。
Object    getRoot():返回根节点。
boolean   isLeaf(Object node):判断是否为树叶节点。
void      removeTreeModelListener(TreeModelListener l):删除TreeModelListener
void      valueForPathChanged(TreePath path,Object newValue):当用户改变Tree上的值时如何应对。
 
   你可以实作出这8种方法,然后构造出自己想要的JTree,不过在大部份的情况下我们通常不会这样做,毕竟要实作出这8种方法不
是件很轻松的事,而且java本身也提供了一个默认模式,叫做DefaultTreeModel,这个类已经实作了TreeModel界面,也另外提供许
多实用的方法。利用这个默认模式,我们便能很方便的构造出JTree出来了。下面为DefaultTreeModel的构造函数与范例:
DefaultTreeModel构造函数:
DefaultTreeModel(TreeNode root):建立DefaultTreeModel对象,并定出根节点。
DefaultTreeModel(TreeNode root,Boolean asksAllowsChildren):建立具有根节点的DefaultTreeModel对象,并决定此节点是否允
                       许具有子节点。

1.1.3      DefaultTreeModel 构造树

 

package com.jtree;

 

import javax.swing.*;

import java.awt.BorderLayout;

import java.awt.Rectangle;

import java.util.Hashtable;

import javax.swing.tree.DefaultMutableTreeNode;

import javax.swing.tree.DefaultTreeModel;

 

public class DefaultModelDemo extends JFrame {

    public DefaultModelDemo() {

        this.setSize(500, 300);

        this.setLocation(150, 150);

        try {

            jbInit();

        } catch (Exception ex) {

            ex.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

        DefaultModelDemo tree = new DefaultModelDemo();

        tree.setVisible(true);

        tree.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

    }

 

    private void jbInit() throws Exception {

        this.setTitle("测试默认模型树");

        this.getContentPane().setLayout(borderLayout1);

        this.getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        jPanel1.add(jScrollPane1);

        DefaultMutableTreeNode root = new DefaultMutableTreeNode("JAVA");

        DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("J2SE");

        DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("J2EE");

        DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("J2ME");

        root.add(node1);

        root.add(node2);

        root.add(node3);

        jTree1 = new JTree(root);

        jScrollPane1.getViewport().add(jTree1);

        jScrollPane1.setBounds(new Rectangle(42, 38, 208, 216));

        jPanel1.setLayout(null);

    }

 

    JPanel jPanel1 = new JPanel();

    BorderLayout borderLayout1 = new BorderLayout();

    JScrollPane jScrollPane1 = new JScrollPane();

    JTree jTree1;

 

 

}

   

原创粉丝点击