按下ENTER时,JavaFX ComboBox具有奇怪的事件行为

时间:2016-02-09 10:45:19

标签: java javafx

按下ENTER键时,我在理解JavaFX ComboBox的事件行为时遇到问题。

我在场景上添加了一个事件处理程序和事件过滤器,并在KeyEvent.KEY_RELEASED上监听组合框。 请参阅以下示例代码:

ComboBox<String> cb = new ComboBox<>();
cb.getItems().addAll("Test", "hello", "world");

cb.addEventFilter(KeyEvent.KEY_RELEASED, event -> System.out.println("combobox filter"));
cb.addEventHandler(KeyEvent.KEY_RELEASED, event -> System.out.println("combobox handler"));

VBox root = new VBox(cb);         
Scene scene = new Scene(root);

scene.addEventFilter(KeyEvent.KEY_RELEASED, event -> System.out.println("scene filter"));
scene.addEventHandler(KeyEvent.KEY_RELEASED, event -> System.out.println("scene handler"));

当组合框被聚焦并且我按下一些字母键时,我得到了这个结果:

scene filter
combobox filter
combobox handler
scene handler

这是预期的行为。首先,从上到下调用​​过滤器。之后,处理程序从下到上执行。这很好。但是当我按下ENTER键时,我得到以下结果:

scene filter
combobox filter
scene filter
scene handler
combobox handler

我不明白这种行为。

关于我实际尝试实施的内容的一些判断: 我们有一个表格对话框。要求是在用户按下ENTER键时关闭对话框,除非此时打开了ComboBox。在这种情况下,只应关闭ComboBox,但对话框应保持打开状态。

我试图在关闭ENTER对话框的场景中使用EventHandler来实现它。在ComboBox上我添加了一个消耗该事件的EventFilter。问题是即使我在comboBox的eventFilter中使用了事件,由于描述的行为,场景中的eventHandler仍然被执行。

0 个答案:

没有答案