[英]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.