java 动态的给树添加新节点 望高手指点啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 动态的给树添加新节点 望高手指点啊相关的知识,希望对你有一定的参考价值。
最好能有具体的代码
//先选中节点才能增加节点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)
参考技术A 这个我已经调试好了,你运行看看
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);
参考技术B 你首先要说明白是javascript还是java swt/rcp还是什么其他的地方用.
c语言动态库的加载问题!!!!请高手指点!!!!!!!!
其实是在看一个linux 下so动态库的实例的时候感觉不理解,假如我的main.c里调用一个lib.so里面的函数foo()写main的时候前面dlopen加载好了lib.so后面直接写foo()这样不会报错么???我找遍工程里没有一点对foo的定义就直接用了,我们讨论的是在编译的阶段main没跑起来没加载上so怎么就知道有foo这个玩意???真实编译起来还真的没报错,这个实在不好理解啊
只需要在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成目标文件时指明动态库名进行编译,gcc将会从动态库中将公用函数连接到目标文件中。并没有你理解的需要main跑起来才会加载so追问这里讨论的是一个非gcc连接库文件的场合,假设项目组有两个部门支撑组负责动态库文件部分,而且他们在目标机里面先一步下载进去lib.so了,模块组现在在电脑上做一个新的功能的模块下载进目标机,并调用lib.so,支撑组处于保密需求不能把lib.so给其他部门,所以模块组电脑上就没有lib.so也没有办法gcc把库连接进去了,所以用dlopen调用
参考技术A dlopen 是肯定不会“定义”foo的,它只能加载。肯定有哪里定义过 foo 了。把整个项目 Control-F 一下。
以上是关于java 动态的给树添加新节点 望高手指点啊的主要内容,如果未能解决你的问题,请参考以下文章
android开发中menu菜单怎么一直弹不出来啊 小弟初学 望高手指点啊 ~~~
最近在搞论坛,用DISCUZ,但是问题比较多啊,这次关于上传图片、附件又遇到问题了,望高手指点~~
我写了一个java程序(有main函数的那种),我现在想让这个程序每天定时在服务器自动运行 ,望高手指点
用PHP+MYSQL做一个简单的点餐系统的后台,初学者. 请高手指点下如何实现后台添加菜名 餐馆 价格