gpt4 book ai didi

javafx - 如何禁用 JavaFX MenuBar 的助记符?

转载 作者:行者123 更新时间:2023-12-01 00:43:52 31 4
gpt4 key购买 nike

在我的舞台上,我像往常一样为程序在顶部插入了一个菜单栏。我想在舞台的另一个上下文中给 ALT 键(连同箭头键)一些逻辑。但是每次我按 ALT 和箭头时,我也会无意中浏览菜单栏的菜单。

我想避免这种情况或更好地完全禁用这种助记符行为。
将所有菜单的 mnemonicParsing 属性设置为 false 失败。我也尝试过这种方法但没有成功:

menubar.addEventFilter(KeyEvent.ANY, e -> e.consume());

最佳答案

当按下 ALT 时,第一个菜单获得焦点,当菜单获得焦点时,无论是否按下 ALT,箭头键都会在其中导航。因此,为了防止这种行为,您需要防止按下 ALT 时第一个菜单获得焦点。

看着MenuBarSkin类的构造函数源代码,给了我们解决方案:

public MenuBarSkin(final MenuBar control) {
...
Utils.executeOnceWhenPropertyIsNonNull(control.sceneProperty(), (Scene scene) -> {
scene.getAccelerators().put(acceleratorKeyCombo, firstMenuRunnable);

// put focus on the first menu when the alt key is pressed
scene.addEventHandler(KeyEvent.KEY_PRESSED, e -> {
if (e.isAltDown() && !e.isConsumed()) {
firstMenuRunnable.run();
}
});
});
...
}


解决方案:

正如您已经猜到的,解决方案是在 ALT 关闭时使用该事件,但您需要将 EventHandler 添加到 scene不是 menubar :
scene.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
// your desired behavior
if(event.isAltDown())
event.consume();
}
});

关于javafx - 如何禁用 JavaFX MenuBar 的助记符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36009964/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com