如果条件下如何使用KeyEvent?

时间:2019-05-24 06:14:50

标签: javafx

使用Javafx,我有文本区域,如果用户按Shift&Enter,我想换行

我使用&&也使用+

private void KeyRelsesed_send(KeyEvent event) {

        if (event.getCode() == (KeyCode.SHIFT && KeyCode.ENTER)) {

            area.appendText("\n");
        }

1 个答案:

答案 0 :(得分:3)

Shift 键是修饰键。 KeyEvent类具有返回布尔值的方法,用于在按下另一个非修饰键时检查修饰键是否按下。如果要检查 Shift + Enter ,则可以使用:

if (event.isShiftDown() && event.getCode() == KeyCode.ENTER) {
    // Do something...
}

请注意,这还将允许其他修改键也可以按下。如果除 Shift 以外的一个或多个修饰键按下时,// Do something...代码不应该执行,那么您必须明确检查它们是否不存在(例如!event.isAltDown() )。在这种情况下,如果您创建自己的KeyCombination并测试KeyEvent是否与之匹配,则可能更容易实现。

KeyCombination combo = new KeyCodeCombination(KeyCode.ENTER, KeyCombination.SHIFT_DOWN);

if (combo.match(event)) {
    // Do something...
}

根据KeyCodeCombination's constructor的文档,这将需要使其他修饰键保持打开状态:

  

为指定的主键和指定的修饰符列表构造一个KeyCodeCombination。所有未明确列出的修饰键均设置为默认RELEASED值。

注意:它说RELEASED,但它们的意思是UP

如果您需要了解同时按下多个 non-modifier 键,则需要跟踪已按下但尚未释放的键。为此,请看一下possible duplicatelinked by Tarmo的可接受答案。