teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%

Q&A

解決済

1回答

159閲覧

javafx altキーでメニューバーをactivateしない方法を教えてください

HSSHSK

総合スコア13

1グッド

0クリップ

投稿2025/06/06 14:52

編集2025/06/06 15:07

1

0

実現したいこと

現在WindowsをプラットフォームにjavaFXでアプリを開発中です。アプリを操作するためにaltキーを使いたいのですが、アプリの動作と同時にメニューバーも反応してしまいます(Wndoesの仕様)。それをdisableにしたいのですが方法がわかりません。
もちろん、Key pressイベントとKey releaseイベントでevent.consume()はしているのですが反応しないようです(ソース参照)。
どなたか実現方法を教えてください。event.consume()でなくてアプリ使用中はjavafxからWindowsのメニューバーのmnemonic機能そのものを反応しなくするような方法でも構いません。よろしくお願いします。

発生している問題・分からないこと

keyPres、keyReleaseでevent.consume()してもaltキー押下でWindowsおメニューバーが反応してしまう。

該当のソースコード

javaFX

1rootbp.sceneProperty().addListener((observable, oldScene, newScene) -> { 2 if (newScene != null) { 3 newScene.setOnKeyPressed(e -> { 4 e.consume(); 5 switch (e.getCode()) { 6 case KeyCode.ALT: 7 kyev.kyalt = true; 8 ----------------- 9 break; 10 ------------------ 11 });

試したこと・調べたこと

上記の詳細・結果

stackoverflowなど調べまくってその通りにしてみましたがうまくいきませんでした。またkeyTypedイベントの場合は、altキーのcharacterが取得できないので使えません。

補足

特になし

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2025/06/06 23:09

Altキーをどう使いたいんですかね? stageのaddEventFilter中でconsumeしたら * Altキーは拾える * Alt+Fとかでファイルメニューは開かなくなる ようにはなりました。 ただ * Alt+Tab(ウィンドウ切り替え)は当然として * Alt+Space(システムメニュー)や * Alt+F4(アプリの終了)も 止められませんでした(まあ下ふたつは個別に対応可能かもしれません) あと例えばTextAreaにキャレットがある状態で、Alt+Fを単なるF扱いにするみたいなこともざっと試しただけでは無理でした(イベントを捏造するような手法) [JavaFxで矢印キーの入力を受け取りたいです。](https://teratail.com/questions/0t0tm2w1ru0iuo)
HSSHSK

2025/06/07 14:13

コメントありがとうございます。stageのaddEventFilter中でconsumeしたらできました。 大変助かります。 因みにやりたいことはALTを押しながら図形をクリックすると図形が変化する機能です。それもメニューが反応することなくできました。 ありがとうございます。 ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答1

0

ベストアンサー

javafx altキーでメニューバーをactivateしない方法

stageaddEventFilter中でconsumeしたら、
Node#addEventFilter (JavaFX 8)
3 イベント・フィルタの使用(リリース8)

  • Altキーは拾える
  • Alt+Fとかでファイルメニューは開かなくなる

ようにはなりました^^
JavaFxで矢印キーの入力を受け取りたいです。

java

1import javafx.application.Application; 2import javafx.scene.Scene; 3import javafx.scene.control.*; 4import javafx.scene.input.*; 5import javafx.scene.layout.BorderPane; 6import javafx.stage.Stage; 7 8public class HelloApplication extends Application { 9 public static void main(String[] args) { launch(); } 10 11 public void start(final Stage stage) { 12 stage.addEventFilter(KeyEvent.ANY, event -> { 13 if (event.isAltDown()) { 14 event.consume(); 15 System.out.println("isAltDown " + event.getCode()); 16 } 17// if (event.getCode() == KeyCode.ALT || event.getCode() == KeyCode.ALT_GRAPH) { 18// event.consume(); 19// System.out.println("ALT " + event.getEventType()); 20// } 21 }); 22 23 var menuBar = new MenuBar( 24 new Menu("ファイル(_F)", null, 25 new MenuItem("新規(_N)"), 26 new MenuItem("開く(_O)")), 27 new Menu("編集(_F)", null, 28 new MenuItem("切り取り(_T)"), 29 new MenuItem("コピー(_C)"))); 30 31 var root = new BorderPane(new TextArea()); 32 root.setTop(menuBar); 33 34 var scene = new Scene(root); 35// scene.addEventFilter(... ではうまくいかんかった 36 37 stage.setScene(scene); 38 stage.setWidth(300); 39 stage.setHeight(200); 40 stage.show(); 41 } 42}

投稿2025/06/07 16:50

編集2025/06/07 17:23
TN8001

総合スコア10106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HSSHSK

2025/06/08 14:26

回答ありがとうございます。 sceneでaddEventFilter中で⇒ consumeしてもダメでしたが、stageで定義すると動くようになりました。 ありがとうございます。感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問