1

MenuItem.setAccelerator() を使用して、メイン メニューにいくつかのアクセラレータを追加しました。コピー用のctrl-cなどの基本的なものだけです。

これは正常に動作します。しかし、このアプリは IDE に少し似ており、JTables を含むいくつかのパネルがあります。テーブル セルにフォーカスがある場合は、アクセラレータ キーが吸収されます。つまり、メイン メニューには表示されません。

明らかに、編集可能なテーブル セルがアクティブな場合はカット アンド ペースト キーが正常に機能するようにしたいのですが、それ以外の場合はメイン メニューが応答するようにしたいと考えています。

何か案は?

4

2 に答える 2

2

KeyStrokes は、最初にフォーカスのあるコンポーネントに移動します。JTable は Ctrl+C をアクションにバインドするため、そのアクションが呼び出されます。

テーブルのデフォルトのアクションが気に入らない場合は、テーブルからバインディングを削除する必要があります。

How to Use Key Bindingsに関する Swing チュートリアルのセクションを読んでください。バインディングを削除する方法を示します。

于 2011-02-15T23:06:39.320 に答える
1

ありがとう、それは私を正しい軌道に乗せました。

バインディングを削除してもうまくいきませんでした。テーブルがデフォルトのアクションを実行するのをやめただけなので、キープレスは完全に無視されました。

ただし、これをテーブル自体に追加すると問題なく機能しました。

    component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK), "copy");
    component.getActionMap().put("copy", actions.copyAction);

(もちろん、必要なキーごとに繰り返されます)。メインメニュー自体への変更と同期を保つ必要がありますが、どの方法でもそれを回避する方法がわかりません.

于 2011-02-16T14:48:41.643 に答える