【问题标题】:JavaFX KeyCode for percent (%)百分比 (%) 的 JavaFX KeyCode
【发布时间】:2016-06-03 03:53:28
【问题描述】:

我想检测何时按下某些键。我似乎找不到百分号 (%) 的 KeyCode。我已经搜索了 JavaFX 8 JavaDoc,并且没有 PERCENT 的 Enum 常量,就像我期望的那样。谷歌也没有帮助。 % 有什么我不知道的特别之处吗?

@FXML
private void keyPressed(KeyEvent evt) {
    if (evt.getCode().isDigitKey() && !evt.isShiftDown()) {
        String number = evt.getText();
        numberAction(number);
    }
    if (evt.getCode().equals(KeyCode.DECIMAL)) {
        decimalAction();
    }
    if (evt.getCode().equals(KeyCode.PERCENT)) {
        percentAction();
    }
}

枚举KeyCode.PERCENT 不存在。

【问题讨论】:

  • 有代码要分享吗?不久前我遇到了类似的问题。如果您从一些代码开始我们会有所帮助。
  • @mohsenmadi 不确定它是否真的有帮助,但我在我的问题中添加了一些代码。我只想在我的键盘上使用KeyCode 表示百分比(Shift+5)。我可以使用KeyCombination 检测 Shift+5,但我想使用KeyCode 来表示最后一次按下的键。
  • 我在@fabian 下面看到了一个很好的解决方案,或者您甚至可以在输入时使用 getText() 来确定按下的键是否为 %。不过,确实,似乎不存在使用相同编码方法处理所有键的干净解决方案。
  • 这对我来说似乎是一个错误。除 5 (%) 外,每个数字的移位状态都有一个 KeyCode。甚至还有一个“^”(KeyCode.CIRCUMFLEX)。
  • 所有 KeyCode 常量代表未移位的键。虽然在美国键盘上很少看到像抑扬符这样的专用键,但有些布局,尤其是在美国以外的地区,有这样的键。

标签: javafx keycode


【解决方案1】:

不要使用keyPressed 事件,而是使用keyTyped 事件并使用KeyEvent.getCharacter 来获得独立于键盘布局的结果:

@FXML
private void keyTyped(KeyEvent evt) {
    ...
    if ("%".equals(evt.getCharacter())) {
        percentAction();
    }
}

(当然你需要修改你的fxml文件。)

【讨论】:

  • 谢谢@fabian。这将起作用。我能够以与此类似的方式解决它。
【解决方案2】:

你试过了吗?

YOUR_CONTROLLER.setOnKeyPressed(event ->{
        if((event.getCode() == KeyCode.DIGIT5) && event.isShiftDown())
            System.out.println("It's work");

});

是的,您找不到此符号的 KeyCode,因为要编写它,您应该按 1 个以上的键(:

更新: 你也可以试试这个:

YOUR_CONTROLLER.setOnKeyPressed(event ->{
        if((event.getText().equals("%"))
             System.out.println("It's work");
});

【讨论】:

  • 这个解决方案相当糟糕......它取决于键盘布局并且会失败,例如对于AZERTY layout
  • 那么,键是DIGIT和isShiftDown,现在是哪个键呢?
  • 显然我不能:-)
  • @GVArt,但是就像我上面提到的,除了5(%)之外,每个数字的移位状态都有一个KeyCode。这些也需要 shift 键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多