如何在javaFx的start方法中使用setOnKeyPressed两次?

时间:2017-10-20 21:25:13

标签: javafx

我试图在setOnKeyPressed方法中使用事件注册方法start两次,但我首先调用的方法不起作用。 例如,当我运行此代码并且单击键盘Wow Wow Wow上的键时,不会打印!当我首先调用另一个方法,然后运行代码并单击键盘时,Pane上也没有显示任何内容,但我在控制台上打印了Wow Wow Wow。我不知道为什么!

以下是代码:

public class Test extends Application {

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

    @Override
    public void start(Stage stage) throws Exception {
        Pane pane = new Pane();
        Text txt = new Text();
        txt.setLayoutX(30);
        txt.setLayoutY(30);
        pane.getChildren().add(txt);


        pane.setOnKeyPressed(e -> {
            System.out.println("Wow Wow Wow");
        });

        pane.setOnKeyPressed(e -> {
            sms = sms + e.getText();
            txt.setText(sms);
        });

        Scene scene = new Scene(pane, 300, 300);
        stage.setScene(scene);
        stage.setResizable(false);
        stage.show();

        pane.requestFocus();
    }
}

1 个答案:

答案 0 :(得分:1)

setOnXxx()是非常方便的方法,它在幕后使用addEventHandler(EventType, EventHandler<Event>),每个类型允许多个处理程序。

addEventHandler(KeyEvent.KEY_PRESSED, evt -> doSomething());