2017-10-20 4 views
0

startメソッド内でイベント登録メソッドsetOnKeyPressedを2回使用しようとしていますが、最初に呼び出すメソッドは機能しません。 たとえば、このコードを実行してキーボードからキーをクリックすると、Wow Wow Wowは印刷されません。そして、私が他の方法を最初に呼び出すと、コードを実行してキーボードをクリックすると、ペインに何も表示されませんが、Wow Wow Wowがコンソールに表示されます。どうしてか分かりません!javaFxのstartメソッド内でsetOnKeyPressedを2回使用するにはどうすればよいですか?

は、ここでは、コードです:

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(); 
    } 
} 
+0

onKeyPressedは他のプロパティと同様にプロパティです。あるものに設定してすぐに別のものに設定すると、その値が2番目のものになります。複数のイベントハンドラを追加したい場合は、 'addEventHandler(...) 'を使用してください。 –

+0

これはうまくいった!どうもありがとう、本当にありがとうございます。 –

+0

同じコードをonKeyReleasedハンドラに入れることができます。 – Sedrick

答えて

1

setOnXxx()は本当にそれがタイプごとに複数のハンドラを可能にaddEventHandler(EventType, EventHandler<Event>)使用舞台裏で便利なメソッドです。

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

それは働いた!大変ありがとう、本当にありがとう –

関連する問題