我有以下代码可以使用键盘在datepicker中修改日期:
DatePicker startDatePicker = new DatePicker();
startDatePicker.addEventFilter(KeyEvent.KEY_PRESSED, (event) -> {
if (event.getCode().equals(KeyCode.UP)){
startDatePicker.setValue(startDatePicker.valueProperty().get().plusDays(1));
event.consume();
}else if (event.getCode().equals(KeyCode.DOWN)){
startDatePicker.setValue(startDatePicker.valueProperty().get().minusDays(1));
event.consume();
}
});
但是,无论如何,每次按键都会触发两次该事件。我尝试使用KEY_PRESSED和KEY_RELEASED,使用或不使用事件,但是无论我做什么,它总是会触发两次(使用控制台输出测试,每个按键产生两行)。现在,我正在使用布尔变量来解决该问题,因此该事件仅每隔一次运行一次,但必须有一个比此更好的解决方案。
最佳答案
我不确定为什么会这样。它看起来像是日期选择器的弹出窗口接收事件,然后将其重定向到日期选择器,然后日期选择器本身独立接收事件。那可能是一个错误。将侦听器添加到文本字段是否足够解决:
startDatePicker.getEditor().addEventFilter(KeyEvent.KEY_PRESSED, ...);