【JavaFX】キー入力を検出
本稿はJavaFXでキー入力を検出する方法を確認しておきます。
1.キー入力イベントの設定
イベントの設定はSceneクラスのsetOnKeyPressedメソッドやsetOnKeyReleasedメソッドを呼び出します。
このメソッドの引数はEventHandlerであり、実装すべきメソッドはhandleメソッドのみのFanctionalInterfaceです。
ここではゲーム制作で重要なキーイベントを検出してみます。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; public class Test extends Application{ @Override public void start(Stage primaryStage) throws Exception { Scene scene = new Scene(new Group(), 400, 300); primaryStage.setScene(scene); primaryStage.show(); scene.setOnKeyPressed(e -> System.out.println("キーが押されました。")); scene.setOnKeyReleased(e -> System.out.println("キーが離されました。")); } }
キーが押されました。
キーが離されました。
何かのキーを押して離すと上記のような結果が得られるはずです。
2.Enterなど特定のキーを押されたかを検出
どのキーが押されたかの検出はKeyEventオブジェクトのgetCodeメソッドを利用して判定できます。
各キーの列挙型はこちらで確認できます。例えばZキーならswitch文に「case Z」と記述することで判定できます。
それではサンプルをご覧ください。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.input.KeyEvent; import javafx.stage.Stage; public class Test extends Application{ @Override public void start(Stage primaryStage) throws Exception { Scene scene = new Scene(new Group(), 400, 300); primaryStage.setScene(scene); primaryStage.show(); scene.setOnKeyPressed(this::keyPressed); } //キー押し下げを検出 private void keyPressed(KeyEvent e) { switch(e.getCode()) { case ENTER: System.out.println("Enterを押下しました。"); break; case SPACE: System.out.println("スペースを押下しました。"); break; default: break; } } }
Enterを押下しました。
スペースを押下しました。
Enterキーや、スペースキーを押下すると上記のような結果が得られるはずです。
ちなみにgetTextメソッドを利用することで押されたキーの文字を取得することもできます。タイピングゲームなどで使えるかもしれません。
まあ、普通のFXアプリケーションならTextFieldがあるから使用する必要もないか・・・
ディスカッション
コメント一覧
まだ、コメントがありません