簡體   English   中英

在jTree上創建一個右鍵單擊菜單的彈出窗口

[英]creating a right- click menu pop-up on a jTree

我想創建一個jTree,當我右鍵單擊一個節點時,應該給我“重命名”,“添加地區(父)”,“添加城市(子)”的選項。

我的jTree的名字是樹枝

由於我是新手,請問有人可以提供代碼幫助嗎? 提前致謝。

問候,Sarkwa

我建議您將JTree setComponentPopupMenu方法與MouseListener一起使用。 在mouseListener中,確定菜單的Node並生成一次popupMenu。 我寫了一個簡單的示例,可以幫助您完成工作。

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();
}

}

getPopUpMenu方法生成您的popUp。 對於popUp中的所有項目,我添加動作偵聽器。 對於重命名節點,我建議您使用CellEditor而不是菜單,我在此處編寫了使用它的簡單示例。

並閱讀有關JTree教程

腳步:

  • MouseListner添加到JTree
  • 讓鼠標偵聽器僅響應Button3中的事件(右鍵單擊)。
  • 讓列出者的操作顯示JPopupMenu
  • 在菜單中添加您的選項
  • 您的選項將具有一些動作,這些動作需要參考JTree才能進行適當的修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM