gpt4 book ai didi

JavaFX:同时处理组合键和鼠标事件

转载 作者:行者123 更新时间:2023-11-29 08:37:05 26 4
gpt4 key购买 nike

我需要对键 + 鼠标事件组合使用react,例如:

Ctrl + Shift + R + left_mousebutton_clicked

但我想不通,只有 Ctrl + Shift + R 组合键时,如何处理“left_mousebutton_clicked”发生。

类似的解决方案

if(MouseEvent.isControlDown())

将不起作用,因为任何类型的字母都可能有不同的组合键。

有什么想法吗?

最佳答案

您可以使用容器来存储当前按下的键:

private final Set<KeyCode> pressedKeys = new HashSet<>();

您可以通过鼠标单击将监听器附加到要定位的控件的 Scene:

scene.setOnKeyPressed(e -> pressedKeys.add(e.getCode()));
scene.setOnKeyReleased(e -> pressedKeys.remove(e.getCode()));

当这些监听器维护集合时,您可以简单地在目标 Node 上附加一个监听器:

Label targetLabel = new Label("Target Label");
targetLabel.setOnMouseClicked(e -> {
if (e.getButton() == MouseButton.PRIMARY &&
pressedKeys.contains(KeyCode.R) &&
e.isShortcutDown() &&
e.isShiftDown())

System.out.println("handled!");
});

示例应用:

public class MouseClickExample extends Application {

private final Set<KeyCode> pressedKeys = new HashSet<>();

public static void main(String[] args) {
launch(args);
}

@Override public void start(Stage stage) {
VBox root = new VBox();
Scene scene = new Scene(root, 450, 250);

scene.setOnKeyPressed(e -> pressedKeys.add(e.getCode()));
scene.setOnKeyReleased(e -> pressedKeys.remove(e.getCode()));

Label targetLabel = new Label("Target Label");
targetLabel.setOnMouseClicked(e -> {
if (e.getButton() == MouseButton.PRIMARY && pressedKeys.contains(KeyCode.R) && e.isShortcutDown() && e.isShiftDown())
System.out.println("handled!");
});

root.getChildren().add(targetLabel);
stage.setScene(scene);
stage.show();
}
}

注意:元键也存储在 Set 中,但本示例未使用它们。元键也可以在集合中检查,而不是使用鼠标事件上的方法。

关于JavaFX:同时处理组合键和鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43224956/

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