我正在使用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;这种行为?
答案 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;
}
});