问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 动态的给树添加新节点 望高手指点啊12

发布网友 发布时间:2023-10-14 13:47

我来回答

3个回答

热心网友 时间:2024-11-23 19:05

//先选中节点才能增加节点
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

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

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

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){}
}
}
}

热心网友 时间:2024-11-23 19:06

这个我已经调试好了,你运行看看

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;

public class Tree extends JFrame{
private int i=0;

public Tree() {

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
DefaultMutableTreeNode child = new DefaultMutableTreeNode("Child");
DefaultMutableTreeNode select = new DefaultMutableTreeNode("select");

DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("" + i);

root.add(child);
root.add(select);
child.add(child1);

JTree tree = new JTree(root);
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);

// 每个节点的行高
tree.setRowHeight(20);
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
// 内隐类不能直接引用外部类tree,1.外部变量可申明为final 2.新建外部类的对象
JTree tree = (JTree) e.getSource();
DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
i++;
selectNode.add(new DefaultMutableTreeNode("" + i));
// Object s = tree.getLastSelectedPathComponent();//
// getSelectedValue();
// JOptionPane.showMessageDialog(null, s + " is selected",
// "Message !", JOptionPane.YES_OPTION);
}
});

tree.setPreferredSize(new Dimension(100, 300));
// tree.setEnabled(true);
JScrollPane scrollPane = new JScrollPane(tree);
// scrollPane.setSize(100,350);

this.getContentPane().add(scrollPane);
}
public static void main(String[] args) {
Tree tree=new Tree();
tree.getContentPane().add(new JLabel("当你点击叶节点的时候,树会自动扩展!"),BorderLayout.NORTH);
tree.setSize(400, 300);
tree.setVisible(true);

}

}

热心网友 时间:2024-11-23 19:06

你首先要说明白是javascript还是java swt/rcp还是什么其他的地方用.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 JAVA画树37 什么样的晕车药比较好?说名字。还有要怎么吃,需要提前多久吃?1 the fabric is with peach finis...3 ...把60本书平均分给这9个小朋友,每人分几本?还剩几本? 网络问题,高手请进1 网络连接的高手请进!网络连接的问题要请教 ! 钵罗若读音? 干部向我们敬酒,70岁老翁向我们敬酒,我们回敬。 干部的祝酒...59 小孩刷牙,用什么牌子的儿童牙膏比较好1 老翁祝酒时可能说------------------ 我们回...2 igbt管h20r1353能用fga25n120管代替吗34 FGA15N120能代换25N120吗?14 我的电磁炉H20R1202坏了,能用FGA25N120代替吗...128 电磁炉功率管25N120和20R1203有什么区别,可以互相...206 竹子就像解放军叔叔在边境上站岗放哨请问这是一句比喻句还是拟人句... 电磁炉25N120能代替40RR22吗?30 我的手机号已经注册过2980邮箱了可是忘记账号密码 怎么找回...40 请问这首歌的名字,有地址听.1 我有个2980邮箱,但已经忘了帐号,能不能通过我绑定的手机号...61 25n120可以代换20n60吗?26 商丘市人才交流中心电话65 把档案从商丘人才中心调出需要本人办理吗?4 辐射,质子,中子,原子,离子,粒子,量子,分子各自的具体涵义...16 手机关机用移动电源充电后开不了机是什么原因 王大爷摘了40多个桃子!平均分给9个小朋友!还剩3个桃子!王大爷摘了多... 你好!国家栋梁之才是什么意思?17 ANTISTATIC是什么牌子4 销售服装的日常用语(英语)17 利润问题怎么做?公务员行测备考1 干部向我们敬酒,七十岁的老翁向我们敬酒。我们回敬,主人再举杯...1282 草原一课中,干部敬酒时可能说什么老翁敬酒时可能说什么我们回敬...22 人体是靠什么来免疫的? 乌龟眼睛上面好像有一点点白色,是正常的吗?1 王大爷摘了40多个桃子,平均分给9个小朋友 ,还剩下3 个桃子,王大爷摘了... 如何使用晕车药3 求 java 刷新 JScrollPane中jtree树状图... 国考中如何巧解行测数量关系题之利润问题? 量子是什么?与质子,原子什么关系77 清单计价和定额计价有什么区别与联系751 栋梁之才是什么意思5