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