如何在javafx中处理两个不同的enter事件?

时间:2018-10-30 06:57:31

标签: events javafx enter eventhandler

我有窗格和文本字段。我在窗格和文本字段中都使用事件处理程序处理了输入事件。我编写了一组代码,当按下Pane输入和文本字段enter事件时也要执行。当另一个事件正在处理时,如何停止一个事件? (注意:“我的文本字段”位于窗格中。)

    capturePane.addEventFilter(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {
            if(event.getCode()==KeyCode.ENTER){
                System.out.println("capture pane enter clicked");
            }
        }
    });

    textFiled.addEventFilter(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {
            if(event.getCode()==KeyCode.ENTER){
                System.out.println("text field enter clicked");
            }
        }
    });

就我而言,两个打印功能一次都起作用。我只需要执行一项操作。这该怎么做 ? 预先感谢。

1 个答案:

答案 0 :(得分:0)

如果您只是想忽略窗格中的第一个输入,但仍想在文本字段中查看捕获,则可以执行以下操作。看到输入的第一个是父节点,然后继续向下,这就是为什么当您单击Enter时看到两个打印行 您也是

public class Main extends Application {

    @Override
    public void start(Stage stage) {
        TextField textField = new TextField();
        textField.addEventFilter(KeyEvent.KEY_RELEASED, event -> {
            if(event.getCode()==KeyCode.ENTER){
                System.out.println("text field enter clicked");
            }
        });

        Pane capturePane = new Pane();
        capturePane.addEventFilter(KeyEvent.KEY_RELEASED, event -> {
            if(event.getTarget()==textField) {
                System.out.println("Caught it and Ignored");
            }
            else if(event.getCode()== KeyCode.ENTER){
                System.out.println("capture pane enter clicked");
                //Do stuff
            }
        });

        capturePane.getChildren().add(textField);

        Scene scene = new Scene(capturePane);
        stage.setScene(scene);
        stage.show();

    }

    public static void main(String[] args) { launch(args); }
}