キー コマンドでアクセスできるように、Java アプリケーションで元に戻す、やり直しなどのメニュー項目アクセラレータを作成しようとしています。また、適切なプラットフォームで適切なキー コマンドが表示されるようにしたいと考えています。「元に戻す」などの一部のメニュー項目では、Cmd/ Ctrl+であるため非常に簡単Zです。
this.undoMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
このメソッドは、Mac ではキーをgetMenuShortcutKeyMask()
返し、Windows マシンではキーを返します。ここまでは順調ですね。CmdCtrl
ただし、一部のメニュー項目は、プラットフォームによってキーの組み合わせが大幅に異なります。Mac OS ではやり直すには++を実行しますが、Windows ではCmd+を実行します。したがって、if/then ステートメントを実行して使用しているプラットフォームを確認し、2 つのパラメーター セットのいずれかを関数に渡さない限り、上記のコードは機能しません。ShiftZCtrlY
KeyEventクラスに などの定数があることに気付きましたKeyEvent.REDO
。これが「やり直し」キーの組み合わせの定数であると推測していますが、それが何をするかについてのドキュメントがないためわかりません. だから私は次のことを試しました:
this.redoMenuItem.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_REDO, 0));
これにより、適切なキーの組み合わせがアクセラレータとして適用されることを期待していましたが、代わりにアクセラレータが割り当てられていないようです (つまり、メニュー項目の名前の横にキーの組み合わせを示すインジケータがありません)。これは適切な使用KeyEvent.VK_UNDO
ですか?もしそうなら、私は何を間違っていますか?