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
),并使用该事件?