为什么在我的JavaFX Calculator应用程序中成功捕获了除KEYCODE.ENTER以外的每个KeyEvent?

时间:2018-08-15 03:10:10

标签: javafx keyevent

我正在用JavaFX编写一个简单的计算器应用程序。除ENTER键外,每个键盘事件均已成功捕获。 EQUALS(“ =”)是唯一会触发计算功能的硬件键。我搜寻了该站点上甚至可以远程处理键盘事件处理的每个问题,我仔细阅读了Oracle站点上的文档。以下是我的代码的一些摘录(我省去了检查所有可能的KeyCode简洁性的大部分行):

@FXML
private void handleKeyboardEvent(KeyEvent event) {
    KeyCode keyCode = event.getCode();
    if (event.getCharacter().equals("\r") || event.getCharacter().equals("\n")) {
        onEqualsButtonPressed();
    }
    switch (keyCode) {
        case ESCAPE:
            textFieldDisplayEquation.clear();
            textFieldDisplayResult.clear();
            break;

case EQUALS:
    if (event.isShiftDown()) {
        if (textFieldDisplayEquation.getText().length() == 0) {
            textFieldDisplayEquation.clear();
            break;
        } else {
            textFieldDisplayEquation.appendText(" + ");
            break;
        }
    } else {
        onEqualsButtonPressed();
        break;
    }
case ENTER:
    onEqualsButtonPressed();
    break;
}

}

当按下ENTER键时,先前输入到TextField中的文本消失了。 正如我所说,其他所有键盘onKeyPress事件均已成功捕获,并且计算器运行正常(包括单击GUI按钮)!这真让我抓狂。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的。看来,只要清除两个文本字段,就必须告诉GridPane请求焦点。完成此操作后,ENTER键每次都起作用 以下是相关的代码段:

@FXML
private GridPane root;

 @FXML
    private void onButtonClearClicked() {
        labelMessage.setText("");
        textFieldDisplayEquation.clear();
        textFieldDisplayResult.clear();
        root.requestFocus();
    }

感谢所有花时间回答或发表评论的人!