我有以下代码可以使用键盘在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, ...);

09-26 15:40