DatePicker上的事件过滤器会针对一个操作触发两次

时间:2017-02-27 10:26:34

标签: java events javafx eventfilter

我有这段代码可以使用键盘在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,消耗或不消耗事件,但无论我做什么,它总是触发两次(使用输出到控制台测试,每个按键产生两行)。现在我正在使用布尔变量解决它,所以事件只能每隔一段时间工作,但必须有一个比这更好的解决方案。

1 个答案:

答案 0 :(得分:1)

我不完全确定为什么会这样;看起来日期选择器的弹出窗口收到事件,并将其重定向到日期选择器,然后日期选择器本身独立接收事件。那可能是个错误。是否足以将侦听器添加到文本字段:

startDatePicker.getEditor().addEventFilter(KeyEvent.KEY_PRESSED, ...);