JavaFX文本字段覆盖键向上/向下行为

JavaFX文本字段覆盖键向上/向下行为,java,events,javafx,key,textfield,Java,Events,Javafx,Key,Textfield,我正在设计一个带有文本字段的自定义时间控件,并希望在按向上键时实现增加小时或分钟的功能 我打算这样做: textField.setOnKeyPressed(event -> { int caretPos = editableNode.getCaretPosition(); switch (event.getCode()) { case ESCAPE: getSkinnable().reset(); event.consume();

我正在设计一个带有文本字段的自定义时间控件,并希望在按向上键时实现增加小时或分钟的功能

我打算这样做:

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;
    }
});
textField.setOnKeyPressed(事件->{
int-caretPos=editableNode.getCaretPosition();
开关(event.getCode()){
案件逃逸:
getSkinnable().reset();
event.consume();
打破
个案:
如果(!getSkinnable().isInvalid()){
如果(caretPos<3){
getSkinnable().increaseHour();
选择hour();
}否则{
getSkinnable().increaseMinute();
选择分钟();
}
}
event.consume();
打破
}
});
这里的问题是,默认设置上的向上键将插入符号设置为文本的开头

我已经找到了这个帖子:

但是在文本开头设置插入符号的事件出现在我的eventhandler之前,因此这对我没有帮助


有人知道我如何“覆盖”这种行为吗?

詹姆斯的解决方案解决了我的问题

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;
    }
});
textField.addEventFilter(按下KeyEvent.KEY,事件->{
int-caretPos=editableNode.getCaretPosition();
开关(event.getCode()){
案件逃逸:
getSkinnable().reset();
event.consume();
打破
个案:
如果(!getSkinnable().isInvalid()){
如果(caretPos<3){
getSkinnable().increaseHour();
选择hour();
}否则{
getSkinnable().increaseMinute();
选择分钟();
}
}
event.consume();
打破
}
});

如何在字段.caretPositionProperty()上添加一个ChangeListener,以便在更改发生之前获取旧的插入符号位置,然后将插入符号位置设置为旧值?是否尝试添加事件筛选器(而不是
setOnKeyPressed
),并使用该事件?