代码之家  ›  专栏  ›  技术社区  ›  cblupo

如何获取可编辑的组合框以响应ENTER

  •  1
  • cblupo  · 技术社区  · 11 年前

    这段代码就是我想要做的。在可编辑的组合框中键入时,我想释放ENTER并处理回车事件。然而,我无法让应用程序响应,消息没有打印出来。我为一个文本框写了基本上相同的代码,效果很好,打印出了一条消息。我还为ComboBox编写了任何KeyReleased事件的处理程序,效果也很好,打印了一条消息。问题出在回车键上。为什么这个代码不能在可编辑的组合框中执行我想要的操作?

    @FXML
    ComboBox comboBox;
    
    public class ScreenController implements Initializable {
    
        @Override
        public void initialize(...) {
            ...
            comboBox.setOnKeyReleased(new EventHandler<KeyEvent>() {
    
                @Override
                public void handle(KeyEvent ke) {
                    if (ke.getCode == KeyCode.ENTER) {
                        System.out.println("ENTER was released");
                }
                }
            }); 
        }
    }
    
    2 回复  |  直到 11 年前
        1
  •  2
  •   rgielen    10 年前

    我也遇到了同样的问题。幸运的是我找到了 this posting 解决方案是不通过注册处理程序 comboBox.setOnKeyReleased() 。请使用EventFilter:

    comboBox.addEventFilter(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent ke) {
                if (ke.getCode == KeyCode.ENTER) {
                    System.out.println("ENTER was released");
                }
            }
     });
    

    这实际上和预期的一样有效。

        2
  •  1
  •   agonist_    11 年前

    这看起来是一个JavaFX错误。setOnKeyPressed不起作用。看看这个 javafx jira