java中如何监听树结点?如何实现?

java中Tree怎么给子结点设置监听~

给叶节点设置监听的Java程序如下:
package Tree.java;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
public class TreeWin extends JFrame implements TreeSelectionListener{
JTree tree;
TreeWin()
{
setSize(300,250);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container con = getContentPane();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("根结点");
DefaultMutableTreeNode t1 = new DefaultMutableTreeNode("结点");
DefaultMutableTreeNode t2 = new DefaultMutableTreeNode("结点");
DefaultMutableTreeNode t1_1 = new DefaultMutableTreeNode("叶结点");
DefaultMutableTreeNode t1_2 = new DefaultMutableTreeNode("叶结点");
root.add(t1);
root.add(t2);
t1.add(t1_1);
t2.add(t1_2);
tree= new JTree(root); //创建根为root的树
tree.addTreeSelectionListener(this);//给整个树加选择监听
JScrollPane scrollPane = new JScrollPane(tree);
con.add(scrollPane);
}
public static void main(String[] args) {
TreeWin win = new TreeWin();
win.setVisible(true);
}
public void valueChanged(TreeSelectionEvent tse) {
DefaultMutableTreeNode selectionNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if(selectionNode.isLeaf()){ //叶子节点的监听
System.out.println(selectionNode.toString());
}
}
}

我以前用过一种方法:
就是JTree.addMouseListener就可以了。
然后在mouseClicked(MouseEvent e)方法中通过下面的方法获取所选的结点
TreePath path = testTree.getPathForLocation(e.getX(), e.getY());
TreeNode node = (TreeNode) path.getLastPathComponent();
可以用e.getClickCount()方法的返回值来判断是否双击。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
class TreesDemo extends JFrame implements TreeSelectionListener
{
JTree tree=null;
JTextArea text=new JTextArea(20,20);
public TreesDemo()
{
super("处理结点事件");
Container con=getContentPane();
String[][] data={
{"我的电脑","本机磁盘(C:)","本机磁盘(D:)","本机磁盘(E:)"},
{"收藏夹","思维论坛","Java爱好者","网上书店"},
{"我的公文包","公司文件","私人文件","往来信件"},
};
DefaultMutableTreeNode root;
DefaultMutableTreeNode treeNode[][];
root=new DefaultMutableTreeNode("桌面");
treeNode=new DefaultMutableTreeNode[4][4];
for(int i=0;i<data.length;i++)
{
treeNode[i][0]=new DefaultMutableTreeNode(data[i][0]);
root.add(treeNode[i][0]);
for(int j=1;j<4;j++)
{
treeNode[i][0].add(new DefaultMutableTreeNode(data[i][j]));
}
}
tree=new JTree(root);
JScrollPane scrollpane=new JScrollPane(text);
JSplitPane splitpane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,tree,scrollpane);
con.add(splitpane);
tree.addTreeSelectionListener(this);
setSize(500,200);
setVisible(true);
validate();
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
public void valueChanged(TreeSelectionEvent e)
{
if(e.getSource()==tree)
{
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if(node.isLeaf())
{
String str=node.toString();
if(str.equals("本机磁盘(C:)"))
{
text.setText(str+":
这里显示‘C:盘文件'");
}
else if(str.equals("本机磁盘(D:)"))
{
text.setText(str+":
这里显示‘D:盘文件'");
}
else if(str.equals("思维论坛"))
{
text.setText(str+":
这里显示‘www.zsm8.com的精华帖子'");
}
else if(str.equals("Java爱好者"))
{
text.setText(str+":
这里显示‘Java爱好者网站'");
}
else if(str.equals("网上书店"))
{
text.setText(str+":
这里显示‘网上书店的购物信息'");
}
else if(str.equals("公司文件"))
{
text.setText(str+":
这里显示‘公司内部文件'");
}
}
else
{
text.setText(node.getUserObject().toString());
}
}
}
}
public class Example5_28
{
public static void main(String[] args)
{
new TreesDemo();
}
}

首先建立结构树,然后设置监听器,在监听器中设置相应的动作。

程序仅供参考。

程序运行的结果如下 :



java 目录树如何检索子级返回
答:Java中使用递归算法实现查找树形结构中所有父级和子级节点,用递归加一个全局变量标记是否已经找到,然后返回。截取后面的一段例子:if (list[i].ID.Equals(id) || found)found = true;return;

java如何输出树形坐标
答:要输出树形坐标,可以使用递归的方式来实现。具体步骤如下:1. 定义一个递归函数,接受树的节点和当前层数作为参数。2. 在递归函数中,首先输出当前节点的值,并在其后面加上当前层数的表示,例如使用横线 "-" 表示层数。3. 然后递归调用左子树,传入左子节点和当前层数加一。4. 再递归调用右子树,...

Java中查询树,当查询到相应的树节点,如何让焦点显示在相应的树...
答:根据不同的选择模式,使用 void setSelectionPath(TreePath path)选择指定路径标识的节点。void setSelectionPaths(TreePath[] paths)选择由指定的路径数组标识的节点。void setSelectionRow(int row)选择显示的指定行的节点。void setSelectionRows(int[] rows)选择与显示的每个指定行对应的节点。

java 动态的给树添加新节点 望高手指点啊
答://取得新节点的父节点 parentNode=(DefaultMutableTreeNode)(parentPath.getLastPathComponent()); //由DefaultTreeModel的insertNodeInto()方法增加新节点 treeModel.insertNodeInto(newNode,parentNode,parentNode.getChildCount()); //tree的scrollPathToVisible()方法在使Tree会自动展开文件夹以便显示所加入的新节点。

JAVA中如何删除树中所选的节点?
答://点的是根结点 if(selectedNode.isRoot()){ JPopupMenu pop = getPopMenu(1,path,selRow);// System.out.println(selRow);this.getContentPane().add(pop);pop.show(tree,x,y);} //叶结点 if(selectedNode.isLeaf()){ JPopupMenu pop = getPopMenu(0,path,selRow);this.getContentPane(...

java:如何在js中判断树的每个子节点都至少添加到了第三层?
答:循环,不够三层就return false;

java中怎样为多个按钮设置监听
答:import javax.swing.*;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class One{ public static void main(String[] args) { JFrame f = new JFrame("JAVA小游戏"); // 设置f布局管理器为3行3列,组件间水平和垂直间距都为2 ...

在java中,已知jTree树已经建好,如何可以对根节点下面某些子节点进行设置...
答:这个貌似JDK没实现,需要自己搞。无非是根据要求在需要隐藏或不可用的时候把那个对象删掉或把listener都删除

java 求二叉树的叶子结点,下面的代码不知道哪里出错了!
答:3.与2同样的解释,也可知道右孩子也不为空。那么在调用num来计算叶子的个数时候,是不是根结点一开始进来,左右孩子都不为null,所以自然最后一个else。那么往下,lz再计算一下就知道结果为2 建议修改的话:在createbintree方法中,if ("".equals(str.trim()))为空时,则myTree.data=null 然后...

java中如何查询下面树中的的所有用户?只知道根部门的ID,如何遍历所有用 ...
答:直接用递归 先根据你的根ID来select出你需要的东西 然后继续调用查出来的数据做为条件去查询下面的数据就可以了啊 可以一直循环下去

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网