小弟刚学java, 公司要做一个类似资源管理器的东西。
我想问一下各位老大, 在一棵tree中我如何获得我选中的节点, 以及如何去给选中的节点改名!
谢谢!。期待你的帮助!(最好能给一些简单的代码!)

解决方案 »

  1.   

    protected  boolean editable 
              Is the tree editable? Default is false. 
    设置JTree的属性
      

  2.   

    我设置了这个属性。
    但是还是不知道怎么搞!
    不知道要不要写鼠标事件? 树中的node都是我自己写的类, 也就是说我重命名之后, 还要改变对象的名字
    我不知道应该把这些工作放在哪个地方去做?
      

  3.   

    给你一个程序,自己研究吧: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) {
    }
    }
    }
    }
      

  4.   

    其实只要一句话:table.setEditable(true);