7

たとえば、アプリケーションのメイン ウィンドウの上部に一連のツールバー スタイルのボタンがあるとします。これらの 1 つに、F3 のようにキーを 1 回押すだけのニーモニックを付けたいと思います。

ニーモニックを に設定するKeyEvent.VK_F3と、ユーザーは Alt+F3 を押す必要があります。

メニュー項目がある場合は、ニーモニックではなくアクセラレータを設定し、メタ キーを使用するかどうかを選択できます。ただし、ボタンではアクセラレータを設定できません。

ボタンニーモニックのメタキーを無効にする方法はありますか?

4

3 に答える 3

4

アクションは、コードのチャンクをメニュー項目、キーストローク、ボタン、およびその他の関心のあるものにバインドできます。

一般に、コードが特定のキー押下/イベントに関連付けられているとは考えないでください。また、匿名の内部クラスを使用しないでください。代わりに、コードをさまざまな種類のものに再利用できる実際のクラスを使用してください。Action クラスで使用されるそのパターンは、この良い例です。

于 2010-03-02T22:13:43.653 に答える
3

コンポーネントでアクセラレータを使用するかニーモニックを使用するかに関係なく、バックグラウンドでメソッドがキー バインディングを作成します。

そのため、KeyStroke と Action を任意のコンポーネントにバインドし、キー バインドを手動で作成することを妨げるものは何もありません。setMNemonic(...) メソッドを持たないコンポーネントの場合もあります。

于 2010-03-02T23:29:27.010 に答える
0

ボタンがアクションを使用して構成されている場合、ボタンにアクセラレータを定義できないことは確かですか? (ある時点でこれが正しいことは知っていましたが、Java の後のバージョンでは異なる可能性があると思いました。)

いずれにしても、ボタンに設定する別の方法を次に示します。

button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(myKeyStroke, "actionName");
button.getActionMap().put("actionName", myAction);

myKeyStroke は F3 などのキーストローク、「actionName」はラベル (文字列)、myAction は呼び出すアクションです。

于 2010-03-03T22:18:37.917 に答える