JavaFX TextField覆盖键UP / DOWN行为

时间:2018-05-23 19:32:34

标签: java events javafx key textfield

我正在使用TextField设计自定义时间控件,并希望在按下UP键时实现该功能以增加小时或分钟。

这就是我打算这样做的方式:

textField.setOnKeyPressed(event -> {
    int caretPos = editableNode.getCaretPosition();
    switch (event.getCode()) {
    case ESCAPE:
        getSkinnable().reset();
        event.consume();
    break;
    case UP:
        if (!getSkinnable().isInvalid()){
            if (caretPos < 3) {
                getSkinnable().increaseHour();
                selectHour();
            } else {
                getSkinnable().increaseMinute();
                selectMinute();
            }
        }
        event.consume();
    break;
    }
});

这里的问题是默认情况下UP-Key将插入符号设置为文本的开头。

我已经找到了这篇文章:JavaFX Textfield - Override default behaviour when up key is released

但是在文本开头设置插入符号的事件发生在我的事件处理程序之前,所以这对我没用。

有谁知道我怎么能&#34;覆盖&#34;这种行为?

1 个答案:

答案 0 :(得分:0)

@James_D的解决方案解决了我的问题。

textField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
    int caretPos = editableNode.getCaretPosition();
    switch (event.getCode()) {
    case ESCAPE:
        getSkinnable().reset();
        event.consume();
    break;
    case UP:
        if (!getSkinnable().isInvalid()){
            if (caretPos < 3) {
                getSkinnable().increaseHour();
                selectHour();
            } else {
                getSkinnable().increaseMinute();
                selectMinute();
            }
        }
        event.consume();
    break;
    }
});