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










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