在JavaFX场景上多次按键(Multiple key press on JavaFX scene)

编程入门 行业动态 更新时间:2024-10-18 10:27:59
在JavaFX场景上多次按键(Multiple key press on JavaFX scene) java

如何在单个场景中检测到多个关键事件? 我需要我的程序来检测何时同时按下空格键右箭头键。

scene.setOnKeyPressed(new EventHandler<KeyEvent>() { public void handle(KeyEvent ke) { if (ke.getCode() == KeyCode.RIGHT) { /// } if (ke.getCode() == KeyCode.LEFT) { /// } if (ke.getCode() == KeyCode.SPACE) { /// } if (ke.getCode() == KeyCode.RIGHT && ke.getCode() == KeyCode.SPACE) { // How?? } } });

前3个表达式寻找单个键并且工作正常。 最后的表达式永远不会返回true。 我相信只有最新的关键事件才会传递给处理程序。

我查看了KeyCodeCombination ,但这似乎是在密钥具有来自指定列表(ALT_DOWN,SHIFT_DOWN等)的修饰键的情况下使用的。

我可以使用FX中的实用程序吗?

How are multiple key events detected in a single scene? I need my program to detect when the space bar and the right arrow keys are pressed simultaneously.

scene.setOnKeyPressed(new EventHandler<KeyEvent>() { public void handle(KeyEvent ke) { if (ke.getCode() == KeyCode.RIGHT) { /// } if (ke.getCode() == KeyCode.LEFT) { /// } if (ke.getCode() == KeyCode.SPACE) { /// } if (ke.getCode() == KeyCode.RIGHT && ke.getCode() == KeyCode.SPACE) { // How?? } } });

The first 3 expressions look for a single key and work fine. The final expression never returns true. I believe only the latest key event is passed to the handler.

I looked at KeyCodeCombination, however this appears to be for use in cases when a key has a modifier key from a specified list (ALT_DOWN, SHIFT_DOWN, etc).

Is there a utility in FX that I can use?

最满意答案

尝试这个:

final BooleanProperty spacePressed = new SimpleBooleanProperty(false); final BooleanProperty rightPressed = new SimpleBooleanProperty(false); final BooleanBinding spaceAndRightPressed = spacePressed.and(rightPressed); // How to respond to both keys pressed together: spaceAndRightPressed.addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<Boolean> obs, Boolean werePressed, Boolean arePressed) { System.out.println("Space and right pressed together"); } }); // Wire up properties to key events: scene.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent ke) { if (ke.getCode() == KeyCode.SPACE) { spacePressed.set(true); } else if (ke.getCode() == KeyCode.RIGHT) { rightPressed.set(true); } } }); scene.setOnKeyReleased(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent ke) { if (ke.getCode() == KeyCode.SPACE) { spacePressed.set(false); } else if (ke.getCode() == KeyCode.RIGHT) { rightPressed.set(false); } } });

Try this:

final BooleanProperty spacePressed = new SimpleBooleanProperty(false); final BooleanProperty rightPressed = new SimpleBooleanProperty(false); final BooleanBinding spaceAndRightPressed = spacePressed.and(rightPressed); // How to respond to both keys pressed together: spaceAndRightPressed.addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<Boolean> obs, Boolean werePressed, Boolean arePressed) { System.out.println("Space and right pressed together"); } }); // Wire up properties to key events: scene.setOnKeyPressed(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent ke) { if (ke.getCode() == KeyCode.SPACE) { spacePressed.set(true); } else if (ke.getCode() == KeyCode.RIGHT) { rightPressed.set(true); } } }); scene.setOnKeyReleased(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent ke) { if (ke.getCode() == KeyCode.SPACE) { spacePressed.set(false); } else if (ke.getCode() == KeyCode.RIGHT) { rightPressed.set(false); } } });

更多推荐

本文发布于:2023-08-07 16:07:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1464557.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:按键   场景   JavaFX   Multiple   scene

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!