Java JMenu - 选定和取消选择的功能

时间:2012-04-16 21:46:53

标签: java swing selected jmenu

我插入了一个没有任何JMenuItem的JMenu(实例名为:exitMenu),所以我的目的是提供一种方法来退出程序,而无需访问不必要的菜单项,因为我的程序只有一个JMenu对象(有人可能会说:WTF !!!但......)。

因此,为了捕获在这个特定的JMenu组件中发生的事件,我的类实现了MenuListener接口。众所周知,有三个强制实现方法,虽然我只需要使用一个,menuSelected()方法。

为了让我的程序有点直观,毫无疑问,一旦用户选择了exitMenu,(in)着名的弹出窗口JOptionPane.showConfirmDialog()就会显示他/她需要在YES或NO选项之间进行选择。

如果选择的选项为YES,则完全没问题,因为程序是通过System.exit(0)完成的。问题是NO选项,当焦点返回到程序时,exitMenu保持被选中,当然,因为我之前选择了。我想做的“事情”是在选择NO选项后立即删除对象选择,这样用户就可以再次点击它。

即使在三个强制方法(一个调用另一个)中使用exitMenu.setSelected(false),虽然exitMenu组件被“取消选择”,但必须单击它两次以调用其事件监听器。

有什么建议吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

我尝试的一件事就是从menuSelected(...)方法中简单地调用setSelected(false),但这有副作用。例如,菜单似乎没有被选中,而另一个菜单则不会一直有效。

一种可行的解决方案是取消选择Swing Timer中的菜单。类似的东西:

     @Override
     public void menuSelected(MenuEvent mEvt) {
        // show JOptionPane
        // if yes selected, exit. 

        // Otherwise...
        final JMenu menu = (JMenu) mEvt.getSource();
        new Timer(200, new ActionListener() {

           @Override
           public void actionPerformed(ActionEvent e) {
              menu.setSelected(false);
              ((Timer)e.getSource()).stop();
           }
        }).start();
     }

答案 1 :(得分:2)

有两个级别
  • JMenuMenuListener

  • JMenuItemButtonModel