Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1932
  • Last Modified:

how to rename a node in JTree when user clicks on the pop-up menu associated with the tree

 I need to rename a node in a JTree. I can do it by setting JTree's setEditable to be true, but  that is not what i want.
  What i really want is that the users can right click on the pop-up menu "Rename" and then change the node name, just exactly like what the the window explorer does.
  Please help me.
0
huer
Asked:
huer
  • 3
1 Solution
 
OviCommented:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;

public class EditableTree extends JFrame {
  private JTree tree;
  private DefaultTreeModel model;
  private TreePopup popup;
  private int x = 0, y = 0;

  public EditableTree() {
    init();
  }

  private void init() {
    setSize(200, 400);
    setLocation(200, 100);
    tree = new JTree();
    tree.addMouseListener(new TreeMouseAdapter());
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    tree.setShowsRootHandles(true);
    tree.setEditable(true);
    tree.putClientProperty("JTree.lineStyle", "Angled");
    popup = new TreePopup();
    getContentPane().add(new JScrollPane(tree));
    setVisible(true);
  }

  public void rename() {
    tree.startEditingAtPath(tree.getClosestPathForLocation(x, y));
  }

  class TreePopup extends JPopupMenu implements ActionListener {
    public TreePopup() {
      addItem(new JMenuItem("Rename"));
    }

    public void addItem(JMenuItem item) {
      item.addActionListener(this);
      add(item);
    }

    public void actionPerformed(ActionEvent ae) {
      String action = ae.getActionCommand();
      if(action.startsWith("Rename"))
        rename();
    }
  }

  class TreeMouseAdapter extends MouseAdapter {
    public void mousePressed(MouseEvent me) {
      checkPopup(me);
    }

    public void mouseReleased(MouseEvent me) {
      checkPopup(me);
    }
    public void checkPopup(MouseEvent me) {
      if(me.isPopupTrigger()) {
        int x = me.getX(); int y = me.getY(); rightPressed(x, y);
      }
    }

    public void rightPressed(int x1, int y1) {
      tree.setSelectionPath(tree.getClosestPathForLocation(x1, y1));
      x = x1;y = y1;
      popup.show(tree, x1, y1);
    }
  }

  public static void main(String[] args) {
    EditableTree editableTree1 = new EditableTree();
  }
}
0
 
OviCommented:
This is the exact behaviuor as in WindowsExplorer. The tree must be made editable, even if you want to programically edit an node. All you have to do is to right click a node and push the "Rename" popup item. If you want that a node to be selected only at a left mouse click, please comment the line : tree.setSelectionPath(tree.getClosestPathForLocation(x1, y1)); from the method TreeMouseAdapter.rightPressed(int, int) (in this moment if you do a right or left click the node becomes selected anyway - WindowsExplorer style).
0
 
huerAuthor Commented:
Thank you so much Qvi. You are really an expert in Java.
I tried the code you sent to me. It is just perfect.
Thank you!
0
 
OviCommented:
Any time.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now