我有窗格和文本字段。我在窗格和文本字段中都使用事件处理程序处理了输入事件。我编写了一组代码,当按下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");
}
}
});
就我而言,两个打印功能一次都起作用。我只需要执行一项操作。这该怎么做 ? 预先感谢。
答案 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); }
}