一个关于如何给JTree中节点重命名的问题(在线等待!) 小弟刚学java, 公司要做一个类似资源管理器的东西。我想问一下各位老大, 在一棵tree中我如何获得我选中的节点, 以及如何去给选中的节点改名!谢谢!。期待你的帮助!(最好能给一些简单的代码!) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 protected boolean editable Is the tree editable? Default is false. 设置JTree的属性 我设置了这个属性。但是还是不知道怎么搞!不知道要不要写鼠标事件? 树中的node都是我自己写的类, 也就是说我重命名之后, 还要改变对象的名字我不知道应该把这些工作放在哪个地方去做? 给你一个程序,自己研究吧:package tests;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.tree.*;public class TreeDemo6 implements ActionListener, TreeModelListener { JLabel label = null; JTree tree = null; DefaultTreeModel treeModel = null; String nodeName = null; //原有节点名称 public TreeDemo6() { JFrame f = new JFrame("TreeDemo"); 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); 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()); treeModel.insertNodeInto(newNode, parentNode, parentNode .getChildCount()); tree.scrollPathToVisible(new TreePath(newNode.getPath())); 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 inserted"); } 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 TreeDemo6(); } 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) { } } }} 其实只要一句话:table.setEditable(true); java调用mysql的存储过程脚本 c/s下多文件多线程传输问题 一道关于生产者与消费的线程同步 用JBuilder运行没有问题,但是用java命令运行.class文件出错,怎么解决? 通过tomcat连接池在java类访问数据库失败! 初学编程 求指教 getImage(new URL("........"));的问题!!!!! 爱上了JAVA之后 JNDI问题 java 运行程序的问题? 使用jacob,jsp中怎么响应ActiveX组件中的事件? 将一个数组赋给一个Vector,请问如何取出该数组的元素?
Is the tree editable? Default is false.
设置JTree的属性
但是还是不知道怎么搞!
不知道要不要写鼠标事件? 树中的node都是我自己写的类, 也就是说我重命名之后, 还要改变对象的名字
我不知道应该把这些工作放在哪个地方去做?
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;public class TreeDemo6 implements ActionListener, TreeModelListener {
JLabel label = null; JTree tree = null; DefaultTreeModel treeModel = null; String nodeName = null; //原有节点名称 public TreeDemo6() {
JFrame f = new JFrame("TreeDemo");
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); 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()); treeModel.insertNodeInto(newNode, parentNode, parentNode
.getChildCount());
tree.scrollPathToVisible(new TreePath(newNode.getPath())); 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 inserted");
} 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 TreeDemo6();
} 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) {
}
}
}
}