【问题标题】:Where do you store the logic for a JPopupMenu?JPopupMenu 的逻辑存储在哪里?
【发布时间】:2013-11-09 13:32:21
【问题描述】:

我对应该将操作逻辑(用户从弹出窗口中选择菜单项时发生的情况)放置在何处感到有些困惑。目前,我将它存储在 JPopupMenu 的子类中,但是当我单击菜单项时,它似乎没有调用该事件。

子类代码:

public class MyPopupMenu extends JPopupMenu {
    JMenuItem item1;
    JMenuItem item2;
    
    public MyPopupMenu() {
        item1 = new JMenuItem("New Tab");
        item2 = new JMenuItem("Close Tab");
        
        add(item1);
        add(item2);
        
    }
    
    class myListener extends MouseAdapter {
        @Override
        public void mouseClicked(MouseEvent ev) {
            System.out.println("I've been clicked!");
        }
    }
}

我通过调用setComponentPopupMenu方法将此附加到我的 JTabbedPane。

myTabPane.setComponentPopupMenu(myPopupMenu); 

这编译正常。它确实按预期显示了弹出菜单,但是在选择弹出菜单中的一个菜单选项后,一切都保持沉默。不会显示任何消息。我需要把它放在别的地方吗?

【问题讨论】:

  • a) 不要扩展 JPopupMenu b) 不要使用鼠标监听器,而是使用操作(只需将它们添加到弹出窗口)顺便说一句,这一切都在在线教程参考的相关章节中进行了解释摇摆标签维基

标签: java swing jmenuitem jpopupmenu


【解决方案1】:

【讨论】:

    【解决方案2】:

    将 MouseListner 添加到您的菜单项

    myListener myListener = new myListener();
    item1.addMouseListener(myListener);
    item2.addMouseListener(myListener);
    

    看来你的方法有点不对。请参考How to Use Menus

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2015-10-25
      • 1970-01-01
      相关资源
      最近更新 更多