繁体   English   中英

如何在事件处理程序中“关闭”JMenu - Java

[英]How to "close" a JMenu in an Event Handler - Java

我有一个添加到 JMenu 的简单 MouseAdapter。 我希望菜单在鼠标悬停时显示其内容,在单击时做出反应,并在鼠标离开时隐藏其内容。 这是我添加监听器的地方:

      public final void addGuiReaction(Runnable clickReaction) {
            JMenu THIS = this;
            this.addMouseListener(new MouseAdapter() {
                final Runnable reaction = clickReaction;
                final JMenu source = THIS;
                @Override
                public void mouseClicked(MouseEvent arg0) {reaction.run();}
                @Override
                public void mouseEntered(MouseEvent arg0) {source.doClick();} // Opens the menu
                @Override
                public void mouseExited(MouseEvent arg0) {/* Need to "close" the menu */}
            });
      }

当鼠标悬停在功能上时,这对于反应和打开都很好,但我不知道如何关闭它。 尝试了setSelected(false)setPopupMenuVisible(false)但两者的问题是下次我将鼠标悬停在菜单上时菜单不会再次打开。

有人知道关闭菜单的好方法吗?

回答“如何关闭 JMenu ...”

代替这个:

/* Need to "close" the menu */

你可以这样说:

source.dispatchEvent(new KeyEvent(source, KeyEvent.KEY_PRESSED, 0, 0, KeyEvent.VK_ESCAPE));

因此模拟 ESC 按键,这将触发 JMenuBar 的 ActionMap 中的相应动作。

然而,这并不能完全解决您的问题,因为当键盘箭头键可以工作时,您将无法使用鼠标 select JMenu 的任何项目,因为尝试输入其中任何项目都会触发 JMenu mouseExited 事件。 您可能还需要将适当的鼠标事件侦听器附加到菜单项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM