`

Tree.java

阅读更多
package com.hengyuan.hyoas.page.test;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class Tree implements ActionListener,TreeModelListener{ 
JLabel label=null; 
JTree tree=null; 
DefaultTreeModel treeModel=null; 
String nodeName=null;//原有节点名称 

public Tree(){ 
JFrame f=new JFrame("TreeTest"); 
Container contentPane=f.getContentPane(); 

DefaultMutableTreeNode root=new DefaultMutableTreeNode("菜单列表"); 

tree=new JTree(root); 
tree.setEditable(true); 
tree.addMouseListener(new MouseHandle()); 
treeModel=(DefaultTreeModel)tree.getModel(); 
treeModel.addTreeModelListener(this); 

JScrollPane scrollPane=new JScrollPane(); 
scrollPane.setViewportView(tree); 

JPanel panel=new JPanel(); 
JButton b=new JButton("新增节点"); 
b.addActionListener(this); 
panel.add(b); 
b=new JButton("删除节点"); 
b.addActionListener(this); 
panel.add(b); 
b=new JButton("清除所有节点"); 
b.addActionListener(this); 
panel.add(b); 

label=new JLabel("Action"); 
contentPane.add(panel,BorderLayout.NORTH); 
contentPane.add(scrollPane,BorderLayout.CENTER); 
contentPane.add(label,BorderLayout.SOUTH); 
f.pack(); 
f.setVisible(true); 
f.addWindowListener(new WindowAdapter(){ 
public void windowClosing(WindowEvent e){ 
System.exit(0); 
} 
}); 
} 
//本方法运行新增、删除、清除所有节点的程序代码. 
public void actionPerformed(ActionEvent ae){ 
if (ae.getActionCommand().equals("新增节点")){ 
DefaultMutableTreeNode parentNode=null; 
DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("新节点"); 
newNode.setAllowsChildren(true); 
TreePath parentPath=tree.getSelectionPath(); 

//取得新节点的父节点 
parentNode=(DefaultMutableTreeNode)(parentPath.getLastPathComponent()); 

//由DefaultTreeModel的insertNodeInto()方法增加新节点 
treeModel.insertNodeInto(newNode,parentNode,parentNode.getChildCount()); 

//tree的scrollPathToVisible()方法在使Tree会自动展开文件夹以便显示所加入的新节点。若没加这行则加入的新节点 
//会被 包在文件夹中,你必须自行展开文件夹才看得到。 
tree.scrollPathToVisible(new TreePath(newNode.getPath())); 
label.setText("新增节点成功"); 
} 
if (ae.getActionCommand().equals("删除节点")){ 
TreePath treepath=tree.getSelectionPath(); 
if (treepath!=null){ 
//下面两行取得选取节点的父节点. 
DefaultMutableTreeNode selectionNode=(DefaultMutableTreeNode)treepath.getLastPathComponent(); 
TreeNode parent=(TreeNode)selectionNode.getParent(); 
if (parent!=null) { 
//由DefaultTreeModel的removeNodeFromParent()方法删除节点,包含它的子节点。 
treeModel.removeNodeFromParent(selectionNode); 
label.setText("删除节点成功"); 
} 
} 
} 
if (ae.getActionCommand().equals("清除所有节点")){ 

//下面一行,由DefaultTreeModel的getRoot()方法取得根节点. 
DefaultMutableTreeNode rootNode=(DefaultMutableTreeNode)treeModel.getRoot(); 

//下面一行删除所有子节点. 
rootNode.removeAllChildren(); 

//删除完后务必运行DefaultTreeModel的reload()操作,整个Tree的节点才会真正被删除. 
treeModel.reload(); 
label.setText("清除所有节点成功"); 
} 
} 
public void treeNodesChanged(TreeModelEvent e){ 
TreePath treePath=e.getTreePath(); 
DefaultMutableTreeNode node=(DefaultMutableTreeNode)treePath.getLastPathComponent(); 
try{ 
int[] index=e.getChildIndices(); 
node=(DefaultMutableTreeNode)node.getChildAt(index[0]); 
}catch(NullPointerException exc){} 
label.setText(nodeName+"更改数据为:"+(String)node.getUserObject()); 
} 
public void treeNodesInserted(TreeModelEvent e){ 
System.out.println("new node insered"); 
} 
public void treeNodesRemoved(TreeModelEvent e){ 
System.out.println("node deleted"); 
} 
public void treeStructureChanged(TreeModelEvent e){ 
System.out.println("Structrue changed"); 
} 
public static void main(String[] args){ 
new Tree(); 
} 

class MouseHandle extends MouseAdapter{ 
public void mousePressed(MouseEvent e){ 
try{ 
JTree tree=(JTree)e.getSource(); 
int rowLocation=tree.getRowForLocation(e.getX(),e.getY()); 
TreePath treepath=tree.getPathForRow(rowLocation); 
TreeNode treenode=(TreeNode)treepath.getLastPathComponent(); 
nodeName=treenode.toString(); 
}catch(NullPointerException ne){} 
} 
} 
}
分享到:
评论

相关推荐

    BinaryTree.java

    在Java语言中,"BinaryTree.java" 通常是一个类文件,代表实现了二叉树结构的类。 在Java中实现二叉树,首先需要定义树节点的数据结构。一个典型的二叉树节点通常包含三个部分:节点数据值、指向左子节点的引用以及...

    java-leetcode题解之Distribute Coins in Binary Tree.java

    今日的主角是“Distribute Coins in Binary Tree.java”这一题解。这个题目的核心在于将二叉树中多余的硬币分发出去,以确保每个节点仅保留一个硬币。这个问题考察了对二叉树的遍历、递归思想、以及树上深度优先搜索...

    java-leetcode题解之Average of Levels in Binary Tree.java

    import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; ...

    java-leetcode题解之Maximum Binary Tree.java

    本篇文章将详细解读Java语言解决LeetCode上的一个特定算法题——“Maximum Binary Tree”(最大二叉树)的解题过程。最大二叉树是指从给定的无序整数数组中构建出的一个二叉树,其中根节点的值是数组中最大的元素,...

    java-leetcode题解之Find Elements in a Contaminated Binary Tree.java

    在解决“Find Elements in a Contaminated Binary Tree”这类LeetCode题目时,首先要了解的是二叉树的数据结构和基本操作。二叉树是每个节点最多有两个子节点的树结构,分为左子节点和右子节点。而所谓的“污染的...

    TestAVL_Tree.java

    java代码实现平衡二叉树的增删查改

    Code03_SymmetricTree.java

    java面试算法/刷题

    Code02_SameTree.java

    java面试算法/刷题

    java-leetcode题解之Closest Leaf in a Binary Tree.java

    在给出的知识点中,我们将详细探讨如何利用Java语言解决这个问题。 首先,要解决这个问题,我们需要理解题目要求。问题通常描述为:给定一棵二叉树,找到与指定节点距离最近的叶子节点。这就意味着我们需要从目标...

    java-leetcode题解之All Nodes Distance K in Binary Tree.java

    All Nodes Distance K in Binary Tree不仅考察了对二叉树的深入理解,还考察了将树转换为图,并利用图搜索算法解决问题的能力。这要求解题者具备扎实的数据结构基础和算法知识,以及将理论知识灵活应用到实际编程...

    java-leetcode题解之Construct String from Binary Tree.java

    在讲解Java解决LeetCode题库中“根据二叉树构造字符串”问题的题解时,我们首先要了解这个题目的具体要求。这个题目要求我们利用给定的二叉树来构造一个字符串。每个节点应该被表示为括号以及其对应的值。左子节点和...

    java-leetcode题解之Lowest Common Ancestor of a Binary Tree.java

    在Java中,解决这个问题通常涉及到递归和二叉树节点的遍历。 在leetcode的题目中,这个问题被抽象为一个特定的算法问题,需要编写代码来实现这一功能。在Java语言中,可以利用其面向对象的特性,通过创建一个二叉树...

    java 生成 Tree.htm

    java 生成 Tree.htmjava 生成 Tree.htm

    ExtJS4+Accordion+SERVLET/STRUTS2+JSON+Ext.tree.Panel实例

    这个实例结合了多个技术,包括Accordion布局、Servlet、Struts2以及JSON数据交互,以及Ext.tree.Panel组件,以创建一个功能丰富的用户界面。 Accordion布局是ExtJS中的一个布局管理器,它允许在一个区域内组织多个...

    BinaryTree_java_

    本文将深入探讨如何用Java语言实现数据库中的二叉树查找,以"BinaryTree.java"为例,帮助你理解相关知识。 二叉树是由节点构成的数据结构,每个节点包含一个值以及最多两个子节点,分别称为左子节点和右子节点。...

    AVLTree.rar_avl_java avltree_tree

    AVLTree.java文件应该包含了AVL树的实现,包括节点类的定义、插入、删除、旋转等核心功能。通过阅读和理解这个源代码,你可以深入学习AVL树的原理和操作,这对于理解和使用自平衡二叉查找树是非常有价值的。在实际...

    TreeBuilder.java

    TreeBuilder.java

    [其他类别]JSP无限级分类目录树_sorttree.zip

    2. `sorttree.java`/`SortTreeServlet.java`:后台处理类,负责获取数据库中的分类数据并进行排序。 3. `Category.java`:分类对象的Java类,包含属性如ID、名称、父ID等。 4. `database.sql`/`categories.db`:...

Global site tag (gtag.js) - Google Analytics