知识大全 JTree用法及JTree使用经验总结

Posted 结点

篇首语:一箫一剑平生意,负尽狂名十五年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JTree用法及JTree使用经验总结相关的知识,希望对你有一定的参考价值。

JTree用法及JTree使用经验总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  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;

  /*

  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 example   =   new  JTree();

  // 构造函数 JTree(Object[] value)

  Object[] letters =  a   b   c   d   e ;

  JTree example   =   new  JTree (letters);

  // 构造函数 JTree(TreeNode root)(TreeNode空)

  // 用空结点创建树

  DefaultMutableTreeNode node   =   new  DefaultMutableTreeNode(); // 定义树结点

  JTree example   =   new  JTree (node ); // 用此树结点做参数调用 JTree的构造函数创建含有一个根结点的树

  // 构造函数 JTree(TreeNode root)(同上 只是TreeNode非空)

  // 用一个根结点创建树

  DefaultMutableTreeNode node   =   new  DefaultMutableTreeNode( Color );

  JTree example   =   new  JTree (node ); // 结点不可以颜色 默认为白面黑字

  example 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 example   =   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 example   =   new  JTree (biology);

  horse isLeaf();

  horse isRoot();

  // 构造函数:JTree(TreeModel newModel)

  // 用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode

  // 创建一个树的模型 再用JTree的构造函数创建一个树

  DefaultMutableTreeNode root  =   new  DefaultMutableTreeNode ( Root );

  DefaultMutableTreeNode child   =   new  DefaultMutableTreeNode ( Child );

  DefaultMutableTreeNode child   =   new  DefaultMutableTreeNode ( Child );

  DefaultMutableTreeNode child   =   new  DefaultMutableTreeNode ( Child );

  root add (child ); child add (child ); child add (child );

  DefaultTreeModel model  =   new  DefaultTreeModel (root);

  JTree example   =   new  JTree (model);

  JPanel panel  =   new  JPanel();

  panel setLayout ( new  BoxLayout (panel BoxLayout X_AXIS));

  panel setPreferredSize ( new  Dimension (   ));

  panel add ( new  JScrollPane (example )); // JTree必须放在JScrollPane上

  panel add ( new  JScrollPane (example ));

  panel add ( new  JScrollPane (example ));

  panel add ( new  JScrollPane (example ));

  panel add ( new  JScrollPane (example ));

  panel add ( new  JScrollPane (example ));

  panel add ( new  JScrollPane (example ));

  JFrame frame  =   new  JFrame ( JTreeDemo );

  frame setDefaultCloseOperation (JFrame EXIT_ON_CLOSE);

  frame setContentPane (panel);

  frame pack();

  frame show();

  

   ××××××××××××××××××××××××××××××××××××××××××××××

  在实际开发过程中会经常使用JTree组件 平时会遇到这样或那样的问题 在此将偶得一点经验写下来 与大家共享 希望对大家有所帮助

  private JTree jtNetDevice;//数组件申明

  private JScrollPane jspTree;//滚动面板申明

   初始化

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

   三个经常使用的取值函数

  private DefaultTreeModel getTreeModel()

  return (DefaultTreeModel)jtNetDevice getModel();

  

  private DefaultMutableTreeNode getRootNode()

  return (DefaultMutableTreeNode)getTreeModel() getRoot();

  

  private TreeSelectionModel getTreeSelectionModel()

  return jtNetDevice getSelectionModel();

  

   根据node得到path

  TreePath visiblePath = new TreePath(getTreeModel() getPathToRoot(node));

   根据Path展开到该节点

  jtNetDevice makeVisible(visiblePath);

   根据path设定该节点选定

  jtNetDevice setSelectionPath(visiblePath);

   选中节点的方法

  首先 根据节点得到树路径 其中chosen为需要选中的节点

  TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jtNetDevice getModel())

  getPathToRoot(chosen));

  然后根据Path选中该节点

  jtNetDevice setSelectionPath(visiblePath);

   滚动到可见位置

  jtNetDevice scrollPathToVisible(visiblePath);

   给JTree添加右键弹出菜单

  void jtNetDevice_mouseReleased(MouseEvent e)

  if (e isPopupTrigger())

  jPopupMenu show(e getComponent() e getX() e getY());//弹出右键菜单

  

  

   关于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() >= )

  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

  llapsePath(parent);

  

  

   如何遍历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() >= )

  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() >= )

  for (Enumeration e=node children(); e hasMoreElements(); )

  TreeNode n = (TreeNode)e nextElement();

  TreePath path = parent pathByAddingChild(n);

  visitAllExpandedNodes(tree path);

  

  

cha138/Article/program/Java/hx/201311/25738

相关参考

知识大全 JTree树控件

JTree树控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  树和节点的基本概念 &

知识大全 面试经验及心得

华工面试经验总结今天12点上完韩语后,就匆匆赶去了大学城华工。三下乡还有农民工子女教育项目面试。老实说,去之前,其实是有点不想去的,有点害怕。害怕失败。就到了要上1线的时候,还是想着要放弃。不过,到达

总结的写作包括四大内容,即成绩、经验、问题、教训

总结的写作包括四大内容,即成绩、经验、问题、教训。_____答案:正确解析:总结是对过去一定时期的工作、学习或思想情况进行回顾、分析,并做出客观评价的书面材料。其写作包括四部分内容,即成绩、经验、问题

知识大全 .NET Framework经验总结

.NETFramework经验总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  NETFram

知识大全 ASP开发10条经验总结

开发经典:ASP开发10条经验总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不要再做ASP

知识大全 经验分享 JVM调优方法总结

经验分享JVM调优方法总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 关于MySQL编码问题的经验总结

关于MySQL编码问题的经验总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下所描述无理论

知识大全 Oracle建立DBLINK的操作经验总结

Oracle建立DBLINK的操作经验总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下的

永春乡玉米高产创建技术措施及经验探讨

以高产、优质、高效作为永春乡玉米高产创建技术措施的指导方针,合理选择栽培技术,管理方式等,具体做法是:推广良种+化除+矮壮素+叶面肥+杀虫(菌)剂+测土配方+营养团育苗移栽或地膜覆盖栽培,总结出一套系

永春乡玉米高产创建技术措施及经验探讨

以高产、优质、高效作为永春乡玉米高产创建技术措施的指导方针,合理选择栽培技术,管理方式等,具体做法是:推广良种+化除+矮壮素+叶面肥+杀虫(菌)剂+测土配方+营养团育苗移栽或地膜覆盖栽培,总结出一套系