【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があるから使用する必要もないか・・・










ディスカッション
コメント一覧
まだ、コメントがありません