Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMenu-选定和取消选定功能_Java_Swing_Selected_Jmenu - Fatal编程技术网

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

Java JMenu-选定和取消选定功能,java,swing,selected,jmenu,Java,Swing,Selected,Jmenu,我插入了一个没有任何JMenuItem的JMenu(实例名:exitMenu),因此我的目的是提供一种退出程序的方法,而不访问不必要的菜单项,因为我的程序只有一个JMenu对象(有人可能会说:WTF!!!但是…) 因此,为了捕获这个特定JMenu组件中发生的事件,我的类实现了MenuListener接口。众所周知,有三种强制实现方法,尽管我只需要使用一种,menuSelected()方法 毫无疑问,为了让我的程序更直观,一旦用户选择exitMenu,著名的弹出式JOptionPane.showC

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

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

毫无疑问,为了让我的程序更直观,一旦用户选择exitMenu,著名的弹出式JOptionPane.showConfirmDialog()就会出现在用户需要选择YES或NO选项的地方

如果选择的选项为“是”,则根本没有问题,因为程序是通过System.exit(0)完成的。问题在于“否”选项,当焦点返回到程序时,exitMenu(退出菜单)仍处于选中状态,因为我之前已经选择了。我想做的“事情”是在选择“否”选项后立即删除对象选择,这样用户就可以再次单击它

即使在三个强制方法(一个调用另一个)中使用exitMenu.setSelected(false),尽管exitMenu组件是“取消选择”的,但有必要单击它两次以调用其事件侦听器

有什么建议吗


提前感谢。

我尝试的一件事是从menuSelected(…)方法中简单地调用
setSelected(false)
,但这有副作用。一方面,菜单似乎没有被选中,另一方面,它并不总是工作

一个可行的解决方案是取消选择Swing计时器中的菜单。比如:

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

例如,有两个级别

  • JMenu
    MenuListener

  • JMenuItem
    ButtonModel


您是否尝试将焦点发送到其他位置,如“mainPanel.requestFocus()”?我试图记住该死的方法(requestFocus)的名称,我进行了测试,但不幸的是,也没有成功。无论如何,谢谢。有趣的方法。。。还有更多的工作要做我得用定时器。。。我会尝试并给出反馈。谢谢。对不起。。。也不管用。但也许有一个解决办法。。。他们在没有考虑如何解决这个问题的情况下,没有提供这样的活动。@LucDaher:在我的测试程序中,它对我很有效。如果它对您不起作用,那么您应该创建一个小的可编译和可运行的测试程序来显示这一点,并允许我们查看和体验您的必要条件。我发现了问题所在,也许它对您起作用,因为您可能使用任何Microsoft Windows操作系统(或者一些不同于Linus的操作系统,使用Gnome GTK+作为窗口管理器)。我忘了提到我的测试环境所在的底层操作系统是Ubuntu,我使用Gnome GTK+作为我的默认外观。一旦我在我的来宾WinXP virtualbox上测试并使用您的建议将L&F设置为“窗口”(或者简单地使用exitMenu.setSelected(false)))注意:我试过在WinXP上使用金属L&F,但效果不太好,只有Windows(或经典)L&F。@LucDaher:谢谢你给我们回复问题及其解决方案!