`
<冫茖>
  • 浏览: 35535 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JTree用法

阅读更多

一、JTree用法及JTree使用经验总结
××××××××××××××××××××××××××××××××××××××××××××××
import java.awt.Color;
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;

/*
JTree的构造函数:
JTree()
JTree(Hashtable value)
JTree(Object[] value)// 只有这个构造函数可以创建多个根结点
JTree(TreeModel newModel)
JTree(TreeNode root)
JTree(TreeNode root, boolean asksAllowsChildren)
JTree(Vector value)
*/
public class JTreeDemo {
public static void main(String[] args) {
   // 构造函数:JTree()
   JTree example1 = new JTree();
   // 构造函数:JTree(Object[] value)
   Object[] letters = { " a ", " b ", " c ", " d ", " e " };
   JTree example2 = new JTree(letters);

   // 构造函数:JTree(TreeNode root)(TreeNode空)
   // 用空结点创建树
   DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(); // 定义树结点
   JTree example3 = new JTree(node1); // 用此树结点做参数调用 JTree的构造函数创建含有一个根结点的树

   // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
   // 用一个根结点创建树
   DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(" Color ");
   // 结点不可以颜色,默认为白面黑字
   JTree example4 = new JTree(node2);
   example4.setBackground(Color.lightGray);

   // 构造函数:JTree(TreeNode root, boolean
   // asksAllowsChildren)(同上,只是TreeNode又有不同)
   // 使用DefaultMutableTreeNode类先用一个根结点创建树,设置为可添加孩子结点,再添加孩子结点
   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);

   // 构造函数: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 example6 = new JTree(biology);
   horse.isLeaf();
   horse.isRoot();

   // 构造函数:JTree(TreeModel newModel)
   // 用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode
   // 创建一个树的模型,再用JTree的构造函数创建一个树
   DefaultMutableTreeNode root = new DefaultMutableTreeNode(" Root1 ");
   DefaultMutableTreeNode child1 = new DefaultMutableTreeNode(" Child1 ");
   DefaultMutableTreeNode child11 = new DefaultMutableTreeNode(" Child11 ");
   DefaultMutableTreeNode child111 = new DefaultMutableTreeNode(" Child111 ");
   root.add(child1);
   child1.add(child11);
   child11.add(child111);
   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();
}
}
××××××××××××××××××××××××××××××××××××××××××××××  

// 数组件申明
private JTree jtNetDevice;
// 滚动面板申明
private JScrollPane jspTree;

1、初始化
     DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("root");
     jtNetDevice = new JTree(rootNode);
     jtNetDevice.setAutoscrolls(true);
     getTreeSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);// 设置单选模式
     jspTree = new JScrollPane();
     jspTree.getViewport().add(jtNetDevice, null);

2、三个经常使用的取值函数
   private DefaultTreeModel getTreeModel(){
     return (DefaultTreeModel)jtNetDevice.getModel();
   }
   private DefaultMutableTreeNode getRootNode(){
     return (DefaultMutableTreeNode)getTreeModel().getRoot();
   }
   private TreeSelectionModel getTreeSelectionModel(){
     return jtNetDevice.getSelectionModel();
   }

3、根据node得到path:
   TreePath visiblePath = new TreePath(getTreeModel().getPathToRoot(node));

4、根据Path展开到该节点
   jtNetDevice.makeVisible(visiblePath);

5、根据path设定该节点选定
   jtNetDevice.setSelectionPath(visiblePath);

6、选中节点的方法
   首先,根据节点得到树路径,其中chosen为需要选中的节点
   TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jtNetDevice.getModel()).getPathToRoot(chosen));
   然后根据Path选中该节点
   jtNetDevice.setSelectionPath(visiblePath);

7、滚动到可见位置
   jtNetDevice.scrollPathToVisible(visiblePath);

8、给JTree添加右键弹出菜单
   void jtNetDevice_mouseReleased(MouseEvent e) {
     if (e.isPopupTrigger()) {
       jPopupMenu1.show(e.getComponent(), e.getX(), e.getY());//弹出右键菜单
     }
   }

9、关于JTree的展开
    // If expand is true, expands all nodes in the tree.
    // Otherwise, collapses all nodes in the tree.
    public void expandAll(JTree tree, boolean expand) {
        TreeNode root = (TreeNode)tree.getModel().getRoot();
        // Traverse tree from root
        expandAll(tree, new TreePath(root), expand);
    }
    private void expandAll(JTree tree, TreePath parent, boolean expand) {
        // Traverse children
        TreeNode node = (TreeNode)parent.getLastPathComponent();
        if (node.getChildCount() >= 0) {
            for (Enumeration e=node.children(); e.hasMoreElements(); ) {
                TreeNode n = (TreeNode)e.nextElement();
                TreePath path = parent.pathByAddingChild(n);
                expandAll(tree, path, expand);
            }
        }
   
        // Expansion or collapse must be done bottom-up
        if (expand) {
            tree.expandPath(parent);
        } else {
            tree.collapsePath(parent);
        }
    }

10、如何遍历JTree
    // 创建树
    JTree tree = new JTree();
   
    // 添加树节点......
   
    // 遍历所有节点
    visitAllNodes(tree);
   
    // 仅遍历展开的节点
    visitAllExpandedNodes(tree);
   
    // Traverse all nodes in tree
    public void visitAllNodes(JTree tree) {
        TreeNode root = (TreeNode)tree.getModel().getRoot();
        visitAllNodes(root);
    }
    public void visitAllNodes(TreeNode node) {
        // node is visited exactly once
        process(node);
   
        if (node.getChildCount() >= 0) {
            for (Enumeration e=node.children(); e.hasMoreElements(); ) {
                TreeNode n = (TreeNode)e.nextElement();
                visitAllNodes(n);
            }
        }
    }
   
    // Traverse all expanded nodes in tree
    public void visitAllExpandedNodes(JTree tree) {
        TreeNode root = (TreeNode)tree.getModel().getRoot();
        visitAllExpandedNodes(tree, new TreePath(root));
    }
    public void visitAllExpandedNodes(JTree tree, TreePath parent) {
        // Return if node is not expanded
        if (!tree.isVisible(parent)) {
            return;
        }
   
        // node is visible and is visited exactly once
        TreeNode node = (TreeNode)parent.getLastPathComponent();
        process(node);
   
        // Visit all children
        if (node.getChildCount() >= 0) {
            for (Enumeration e=node.children(); e.hasMoreElements(); ) {
                TreeNode n = (TreeNode)e.nextElement();
                TreePath path = parent.pathByAddingChild(n);
                visitAllExpandedNodes(tree, path);
            }
        }
    }

二、Swing组件---JTree
××××××××××××××××××××××××××××××××××××××××××××××
import java.awt.Color;
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 JTreeDemo {
public static void main(String[] args) {

   // 构造函数:JTree()
   JTree example1 = new JTree();

   // 构造函数:JTree(Object[] value)
   Object[] letters = { "a", "b", "c", "d", "e" };
   JTree example2 = new JTree(letters);

   // 构造函数:JTree(TreeNode root)(TreeNode空)
   // 用空结点创建树
   DefaultMutableTreeNode node1 = new DefaultMutableTreeNode();// 定义树结点
   JTree example3 = new JTree(node1);// 用此树结点做参数调用 JTree的构造函数创建含有一个根结点的树

   // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空)
   // 用一个根结点创建树
   DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Color");
   JTree example4 = new JTree(node2);// 结点不可以颜色,默认为白面黑字
   example4.setBackground(Color.lightGray);

   // 构造函数:JTree(TreeNode root, boolean
   // asksAllowsChildren)(同上,只是TreeNode又有不同)
   // 使用DefaultMutableTreeNode类先用一个根结点创建树,设置为可添加孩子结点,再添加孩子结点
   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);

   // 构造函数: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 example6 = new JTree(biology);
   horse.isLeaf();// if this node allows children.
   horse.isRoot();// true if this node is the root of its tree

   // 构造函数:JTree(TreeModel newModel)
   // 用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode
   // 创建一个树的模型,再用JTree的构造函数创建一个树

   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();
}
}

分享到:
评论

相关推荐

    JTree用法及JTree使用经验总结及源码

    JTree用法及JTree使用经验总结(吐血推荐) 1、初始化 2、三个经常使用的取值函数 3、根据node得到path:4、根据Path展开到该节点 5、根据path设定该节点选定 6、选中节点的方法 7、滚动到可见位置 8、给JTree添加右键...

    JTree用法大全 swing java

    JTree用法大全,各种使用方法demo,介绍,并附注释。

    如何使用JTree,JTree使用方法

    JTree的使用 JTree的使用 JTree的使用

    JTree的用法

    JTree的用法

    Java Swing树状组件JTree用法实例详解

    主要介绍了Java Swing树状组件JTree用法,结合具体实例形式分析了Swing组件JTree构成树状列表的节点设置与事件响应,以及自定义图形节点的相关操作技巧,需要的朋友可以参考下

    java swing-jtree的用法

    JTree上的每一个节点就代表一个TreeNode对象,TreeNode本身是一个Interface,里面定义了7个有关节点的方法,例如判断是否 为树叶节点、有几个子节点(getChildCount())、父节点为何(getparent())等等、这些方法的定义...

    JTree 树形菜单插件包.rar

    加入这个功能之后,使之在opera下也能正常使用。个人感觉有些混乱。不过,现在没有时间整理。  一、重要属性:  1,picPath:图片路径,默认是为”JTree/”  2,clickItem:当前树中,被点击的节点。clickItem是...

    swing界面设计之JTree

    (四) JTree的使用方法 57 JTreeDemo.java源程序 57 经验汇总 60 1. 初始化 60 2. 三个经常使用的取值函数 60 3. 根据node得到path: 60 4. 根据Path展开到该节点 60 5. 根据path设定该节点选定 61 6. 选中节点的方法...

    ACCP体系(JTree)

    jbuild Jtree, 用法  用Jbulid 做的 小项目 可供初学者学习用

    Java漂亮的树形菜单制作实例(源码).rar

    Java漂亮的树形菜单制作实例(源码),森林状的关系图,文本域,用于显示点击的节点名称,使用了JTree,可以看作是一个jTree的用法演示实例。树形菜单应用广泛,这个Tree制作漂亮,相信会让很多朋友从中学习到实现的...

    jTree:jTree是一个小型jQuery插件,可帮助您从JSON对象构建良好的干净,可排序和可选的文件树结构

    树jTree是一个小型jQuery插件,可帮助您从JSON对象构建一个漂亮的干净且可选的文件树结构... jTree依赖于jQuery框架引导插件的font-awesome.min.css 可以在找到有关js用法的示例。 Sample.json中提供了一个示例json数据

    toxicbug#jtree.cc#screen命令用法与cadaver1

    一、简介作为linux服务器管理员,经常要使用ssh登陆到远程linux机器上做一些耗时的操作。也许你遇到过使用telnet或SSH远程登录linux,运行一些

    Java Swing中的表格(JTable)和树(JTree)组件使用实例

    主要介绍了Java Swing中的表格(JTable)和树(JTree)组件使用实例,本文同时讲解了表格和树的基本概念、常用方法、代码实例,需要的朋友可以参考下

    swing中Tree与滚动条用法实例分析

    主要介绍了swing中Tree与滚动条用法,以实例形式分析了java基于swing实现图形界面的使用技巧,需要的朋友可以参考下

    Exa2-文本编辑器的设计

    初始化界面左边的JTree,设置它的根节点为“正在编辑的文件”,使用DefaultMutableTreeNode的add方法为根节点添加一个子节点,表示编辑器初始状态时时新建一个文件。JTree的setEditable方法设置树不可编辑。 初始化...

    swing各种组件举例

    swing的各种控件用法例子,很全,有jtree,jbutton等

    JBuilder2006 中 Jdbswing —API

    文件格式为 chm, 开发桌面应用程序与数据库打交道,要显示数据 ,用 JTree 或 JTable 是不是太麻烦了,用这个可以查到 JdbTable , JdbTree 等控件的使用方法

    MJTreeTable 1.0

    使用MJTreeTable跟使用jtree一样方便,因为我在写的时候就考虑到了不仅仅是要供我一个人使用。 压缩文件中附带简单示例程序,你会发现一切是多么的简单。 时间仓促,只是treetable的简单实现,希望对有需要...

    Java Swing实例源码包.rar

    包括了JComboBox 、Border、JList、JMenu、JSlider、JTabbedPane、JTable、JToolTip、JTree等常用Swing组件的用法示例,对Java编写界面来说,Swing确实是个不错的选择,希望这些示例能让你更了解Swing的使用用法。

Global site tag (gtag.js) - Google Analytics