gpt4 book ai didi

java - JavaFX 中使用 Lambda 表达式的键绑定(bind)不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:02 25 4
gpt4 key购买 nike

我有一个错误,说我的条件总是错误的。基本上,在 OSX 上关闭应用程序的惯例是使用组合键“COMMAND+W”

我正在尝试在我的程序中复制这一点。

  scene.setOnKeyPressed(e -> {
if ((e.getCode() == KeyCode.COMMAND) && (e.getCode() == KeyCode.W)) {
controller.exitClick();
}
});

如果我只有第一个条件,它就可以工作,但我当然不希望用户只需按 W 即可关闭应用程序。

Controller 只是我的 Controller 类的一个实例,我从中借用了退出函数,因为我在应用程序上定制了退出和最小化按钮。

这是怎么回事?

最佳答案

事件 setOnKeyPressed 一次检测一个个键,您无法在一种情况下检查其中两个键,因为它只能应用于一个键。

您可以做的是创建几个 boolean 变量(每个键一个),并在 setOnKeyPressed 中设置单独检查每个键的条件,如果当前按下的键是其中之一,则将匹配变量设置为 true。检查按下哪个键后,您检查这两个变量,如果两者都为 true 则有人按下了这两个键。

一个小问题是变量永远不会变成false,如果有人没有按下按键怎么办?您可以使用 setOnKeyReleased 这是释放按键时调用的按键事件。分别检查每个键,如果释放了该键,则将条件变量设置为 false

所以应该可以了。如果您需要示例代码,请询问。

编辑

下面的示例展示了 JavaFX 中多键按下的检测。

首先,我需要定义 boolean 变量来保存我的键是否被按下。它们应该是类变量。

boolean keyCommand = false;
boolean keyW = false;

然后我们需要向场景中添加 2 个事件:

onKeyPressed 事件将检测我们的每个键何时被按下。请记住,每个键都会单独调用该事件。

onKeyReleased 事件将检测到我们的按键不再被按下。也为每个键单独调用此事件。

scene.setOnKeyPressed(e -> {
if(e.getCode() == KeyCode.COMMAND)
keyCommand = true;
else if(e.getCode() == KeyCode.W)
keyW = true;

if(keyCommand && keyW)
//both are pressed
doSomething();

});

现在进入第二个 Activity :

scene.setOnKeyReleased(e -> {
if(e.getCode() == KeyCode.COMMAND)
keyCommand = false;
else if(e.getCode() === KeyCode.W)
keyW = false;
});

就是这样。现在, boolean 变量可能不是保存数据的完美方式,BooleanProperty 可能更可取,但它应该也能工作。

关于java - JavaFX 中使用 Lambda 表达式的键绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386926/

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