【发布时间】:2018-05-23 19:32:33
【问题描述】:
我正在设计一个带有 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
但是在文本开头设置插入符号的事件出现在我的事件处理程序之前,所以这对我没有帮助。
有谁知道我可以如何“覆盖”这种行为?
【问题讨论】:
-
如何在 field.caretPositionProperty() 上添加一个 ChangeListener 以便在更改发生之前获取旧的插入符号位置,然后将插入符号位置设置为旧值?
-
您是否尝试添加事件过滤器(而不是
setOnKeyPressed)并使用该事件?
标签: java events javafx key textfield