在jTree上创建右键单击菜单弹出窗口

时间:2013-11-04 15:31:44

标签: java swing jtree

我想创建一个jTree,当我右键单击一个节点时,应该给我“重命名”,“添加区域(父)”,“添加城市(孩子)”的选项。

我的jTree名称是分支

由于我是新手,我可以帮助代码。在此先感谢。

此致,Sarkwa

2 个答案:

答案 0 :(得分:4)

我建议您使用setComponentPopupMenu的{​​{1}}方法和JTree。在mouseListener中,确定菜单的节点并生成一次popupMenu。我写了一个简单的例子,它可以帮助你完成你的工作。

MouseListener

public class Main extends javax.swing.JFrame { private JTree t; private DefaultTreeModel model; private DefaultMutableTreeNode selectedNode; public Main() { DefaultMutableTreeNode n = new DefaultMutableTreeNode("test"); n.add(new DefaultMutableTreeNode("test2")); model = new DefaultTreeModel(n); t = new JTree(model); t.setEditable(true); t.setComponentPopupMenu(getPopUpMenu()); t.addMouseListener(getMouseListener()); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().add(t); pack(); setVisible(true); } private MouseListener getMouseListener() { return new MouseAdapter() { @Override public void mousePressed(MouseEvent arg0) { if(arg0.getButton() == MouseEvent.BUTTON3){ TreePath pathForLocation = t.getPathForLocation(arg0.getPoint().x, arg0.getPoint().y); if(pathForLocation != null){ selectedNode = (DefaultMutableTreeNode) pathForLocation.getLastPathComponent(); } else{ selectedNode = null; } } super.mousePressed(arg0); } }; } private JPopupMenu getPopUpMenu() { JPopupMenu menu = new JPopupMenu(); JMenuItem item = new JMenuItem("edit"); item.addActionListener(getEditActionListener()); menu.add(item); JMenuItem item2 = new JMenuItem("add"); item2.addActionListener(getAddActionListener()); menu.add(item2); return menu; } private ActionListener getAddActionListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if(selectedNode != null){ System.out.println("pressed" + selectedNode); DefaultMutableTreeNode n = new DefaultMutableTreeNode("added"); selectedNode.add(n); t.repaint(); t.updateUI(); } } }; } private ActionListener getEditActionListener() { return new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if(selectedNode != null){ //edit here System.out.println("pressed" + selectedNode); } } }; } public static void main(String... s){ new Main(); } } 方法生成你的popUp。对于popUp中的所有项目,我添加了Listener for actions。对于重命名节点,我建议您使用getPopUpMenu而不是菜单,我写一个使用它的简单示例here

阅读此tutorial for JTree

答案 1 :(得分:2)

步骤:

  • MouseListner添加到JTree
  • 让鼠标侦听器仅响应来自Button3的事件(右键单击)。
  • 让列表工具的操作显示为JPopupMenu
  • 在菜单中添加选项
  • 您的选项将有一些操作需要引用JTree以便进行适当的修改。