前提・実現したいこと
タイトルの通りです。
マウスでボタンをクリックしてイベントを実行するのはSceneBuilderのOn Actionで追加していますが、
ファンクションキーで同一イベントを実行させたいときの処理が上手くできません。
試したこと
Scene追加部分に
java
1scene.setOnKeyPressed(e -> press(e));
KeyCodeのグローバル変数Keyに取得したキーを保存しています。
java
1public static void press(KeyEvent event) { 2 switch (event.getCode()) { 3 case F2: 4 event.getCode(); 5 Hensu.Key = event.getCode(); 6 System.out.println(event.getCode()); 7 break; 8 case F3: 9 event.getCode(); 10 Hensu.Key = event.getCode(); 11 System.out.println(event.getCode()); 12 break; 13 case F4: 14 event.getCode(); 15 Hensu.Key = event.getCode(); 16 System.out.println(event.getCode()); 17 break; 18 case F5: 19 event.getCode(); 20 Hensu.Key = event.getCode(); 21 System.out.println(event.getCode()); 22 break; 23 case F6: 24 event.getCode(); 25 Hensu.Key = event.getCode(); 26 System.out.println(event.getCode()); 27 break; 28 case F9: 29 event.getCode(); 30 Hensu.Key = event.getCode(); 31 System.out.println(event.getCode()); 32 break; 33 case ESCAPE: 34 event.getCode(); 35 Hensu.Key = event.getCode(); 36 System.out.println(event.getCode()); 37 break; 38 default: 39 break; 40 } 41 }
分からないこと
・変数で取得したあとの判定と実行のさせかた
・多数の画面遷移があるのでSceneの部分の追加は都度やらなければいけないのか
追記
java
1 void On_buttonF2Click(ActionEvent event) { 2 /* 3 * 新しい画面を生成する 4 */ 5 try { 6 Parent parent = FXMLLoader.load(getClass().getResource("Ndenpyo.fxml")); 7 Scene scene = new Scene(parent); 8 Stage stage = new Stage(); 9 KANRIMENUController controller = scene.<KANRIMENUController>getController(); 10 scene.getAccelerators().put(KeyCodeCombination.valueOf("F2"), () -> controller.buttonF2.fire()); 11 stage.setScene(scene); 12 stage.setTitle("一覧"); 13 stage.show(); 14 15 16 }catch(IOException e) { 17 e.printStackTrace(); 18 } 19}
###追記2
java
1try { 2 FXMLLoader loader = new FXMLLoader(getClass().getResource("Ndenpyo.fxml")); 3 Parent parent = loader.load(); 4 Scene scene = new Scene(parent); 5 Stage stage = new Stage(); 6 KANRIMENUController controller = loader.<KANRIMENUController>getController(); 7 scene.getAccelerators().put(KeyCodeCombination.valueOf("F2"), () ->controller.buttonF2.fire()); 8 stage.setScene(scene); 9 stage.setTitle("一覧"); 10 stage.show(); 11 12 13 }catch(IOException e) { 14 e.printStackTrace(); 15 }
###コンソール
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787) at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670) at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.base/javafx.event.Event.fireEvent(Event.java:198) at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8879) at javafx.controls/javafx.scene.control.ToggleButton.fire(ToggleButton.java:257) at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206) at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274) at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.base/javafx.event.Event.fireEvent(Event.java:198) at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3851) at javafx.graphics/javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579) at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1849) at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.base/java.security.AccessController.doPrivileged(Native Method) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390) at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433) at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556) at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76) at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273) at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83) at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1782) ... 47 more Caused by: java.lang.ClassCastException: class application.Ndenpyo cannot be cast to class application.KANRIMENUController (application.Ndenpyo and application.KANRIMENUController are in unnamed module of loader 'app') at application.KANRIMENUController.On_buttonF2Click(KANRIMENUController.java:97) ... 58 more
###追記3
java
1 FXMLLoader loader = new FXMLLoader(getClass().getResource("KANRIMENU.fxml")); //KANRIMENU→例で行くとmain 2 Parent parent = loader.load(); 3 Scene scene = new Scene(parent); 4 KANRIMENUController controller = loader.<KANRIMENUController>getController(); 5 scene.getAccelerators().put(KeyCodeCombination.valueOf("ESCAPE"), () -> controller.buttonEsc.fire()); //ここで指定するボタンは例で行くとappの画面にあるものです 6 7 Stage stage = new Stage(); 8 stage.setScene(scene); 9 stage.setTitle("メインメニュー");//メインメニューは例で行くとappです 10 stage.show();
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/16 01:14
2020/09/16 01:32
退会済みユーザー
2020/09/16 01:45
2020/09/16 04:22
退会済みユーザー
2020/09/16 07:22
2020/09/16 07:57
退会済みユーザー
2020/09/17 06:09
退会済みユーザー
2020/09/17 06:12
2020/09/17 08:45
退会済みユーザー
2020/09/18 01:18 編集
退会済みユーザー
2020/09/18 04:23
退会済みユーザー
2020/09/18 07:43
2020/09/18 07:58
退会済みユーザー
2020/09/23 07:05