Как обрабатывать два разных события ввода в javafx? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть панель и текстовое поле. Я обработал ввод события, используя обработчик событий как в панели, так и в текстовом поле. Я написал набор кодов для выполнения, когда нажата панель ввода, а также в поле ввода события. Как остановить одно событие при обработке другого? (Примечание. My TextField находится на панели).

    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 голосов
/ 30 октября 2018

Вы можете сделать что-то вроде этого, если вы просто пытаетесь игнорировать первый ввод с панели, но по-прежнему хотите видеть захват в текстовом поле. Первым, кто увидит ввод, является родительский узел, затем он продолжает движение вниз, поэтому вы видите обе строки печати, когда нажимаете ввод Также вы

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); }
}
...