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

Luc*_*her 5 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组件被"取消选择",但是必须单击它两次以调用其事件监听器.

有什么建议吗?

提前致谢.

Hov*_*els 5

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

一个可行的解决方案是取消选择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();
     }
Run Code Online (Sandbox Code Playgroud)