

javafxでキーボードショートカットを設定しています。

これは動作を確認したんですが

[code]

    KeyCombination.valueOf("Shortcut+W")
    
[/code]

これだと動かないんですがPageUpはどう指定するんですか？

[code]

    KeyCombination.valueOf("Shortcut+PageUp")
    
[/code]

WとPageUpを変えるだけで動かなくなるので、そこの指定方法の問題で間違いないと思うんですが。  
KeyCode.PAGE_UPを使ってもダメでした。


CC BY-SA 4.0
2018-08-24T06:13:13.830
47776
2018-08-27T06:39:28.220
2018-08-27T00:09:54.110
19110
29846
question
java
KeyCombinationにおけるPageUp


`MenuItem`で`KeyCombination.valueOf("Shortcut+PageUp")`が動作しないことと、コードを修正すれば動作することを確認しました。  
サンプルコードの`start`メソッド直下を参考にして、下記のように書き換えて正常動作するかをテストしてみてください。

**下記のどちらかに書き換え**

`KeyCombination.valueOf("Shortcut+Page Up");`  
`new KeyCodeCombination(KeyCode.PAGE_UP, KeyCombination.SHORTCUT_DOWN);`

**サンプルコード**

[code]

    package javafxapplication1;
    
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.ContextMenu;
    import javafx.scene.control.MenuItem;
    import javafx.scene.input.KeyCode;
    import javafx.scene.input.KeyCodeCombination;
    import javafx.scene.input.KeyCombination;
    import javafx.scene.input.KeyEvent;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    
    public class JavaFXApplication1 extends Application {
    
        @Override
        public void start(Stage primaryStage) {
            //下記の2行は同一の表現
            KeyCombination copyKey = KeyCombination.valueOf("Shortcut+Page Up");
            //KeyCombination copyKey = new KeyCodeCombination(KeyCode.PAGE_UP, KeyCombination.SHORTCUT_DOWN);
    
            MenuItem m = new MenuItem("テスト");
            m.setAccelerator(copyKey);
            Button btn = new Button();
            m.setOnAction((ActionEvent event) -> {
                btn.fire();
            });
            ContextMenu cm = new ContextMenu(m);
    
            btn.setText("Say 'Hello World'");
    
            btn.setOnAction((ActionEvent event) -> {
                System.out.println("Hello World!");
            });
    
            btn.setContextMenu(cm);
    
            StackPane root = new StackPane();
            root.getChildren().add(btn);
    
            Scene scene = new Scene(root, 300, 250);
            scene.setOnKeyPressed((KeyEvent event) -> {
                System.out.println(event.getCode().toString()); //CONTROL, PAGE_UPと表示される
            });
    
            primaryStage.setTitle("Hello World!");
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    
[/code]

APIリファレンスの[KeyCombination](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/input/KeyCombination.html)や[KeyCode](https://docs.oracle.com/javase/jp/10/docs/api/index.html?javafx/scene/input/KeyCode.html)を見ても`KeyCombination#valueOf`で使用する特殊キーの名称が分かりませんでした。  
ご存知の方がいましたらご指摘願います。


CC BY-SA 4.0
2018-08-27T06:39:28.220
47845
2018-08-27T06:39:28.220
9820
47776
answer