とにかく書く

日々の雑感や知り得たことを、とにかく書いています

onKeyTyped で Delete キーや BackSpace キーを判定する

JavaFX で onKeyTyped によってキー入力を検知した場合、getCharacter メソッドで返される値は、入力した文字になる。
たとえば "shift" を押しながら "a" を押すと "A" が返される。入力キーの判定は、文字列の一致を見れば良い。
ここで、 Delete や BackSpace の場合、どうすればよいか分からなかった。
結論は、Unicode のコードポイント、つまり "\u007F" や "\u0007" を指定すれば良い。


そもそも UnicodeUTF-8 などとの違いについてよくわかっていなかった。以下の記事が大変わかりやすかった。
equj65.net

Unicode のコードポイント一覧は、Wikipedia にある。
Unicode一覧 0000-0FFF - Wikipedia

判定の例を示す。

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;


public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			BorderPane root = new BorderPane();
			Scene scene = new Scene(root,400,400);
			scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage.setScene(scene);
			primaryStage.show();
			// キーイベント処理の登録
			scene.setOnKeyTyped(this::keyTyped);
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	private void keyTyped(KeyEvent e) {
		switch(e.getCharacter()) {
 		case "a":
 			System.out.println("a is typed.");
 			break;
		case "\u0008":
			System.out.println("BackSpace is typed");
			break;
		case "\u007F":
			System.out.println("Delete is typed");
 			break;
		default:
			System.out.println(e.getCharacter());
			break;
		}
	}
	public static void main(String[] args) {
		launch(args);
	}
}