0

貼り付けアクションを含むJMenuBarを作成し、それにアクセラレータを割り当てて(Control-V)、JMenuItemの貼り付けアクションを記述します。そして、アクセラレータを使用すると、コードが実行され、事前にプログラムされたSwingの貼り付けアクションが実行されるため、テキストが2回貼り付けられると思います。

私はそれをテストしませんでしたが、これが問題になることは非常に論理的に見えます。

ありがとう

4

1 に答える 1

1

Swing はキー バインディングを使用して動作します。そのため、見つかったキー バインディングに応じて、1 つのアクションのみが呼び出されます。したがって、テキストが 2 回貼り付けられることはありません。

どのコンポーネントにフォーカスがあるか、およびアクションがどのように呼び出されたかによって、異なるアクションが呼び出される場合があります。

たとえば、フォーカスがテキスト コンポーネントにある場合、デフォルトの Paste アクションが使用されると思います。

メニュー項目をクリックすると、メニュー項目に追加したアクションが呼び出されます。

フォーカスがテキスト フィールド以外にあるときに Control+V を呼び出すと、メニュー項目にバインドされた Action が呼び出されると思います。これは、アクセラレータが「フォーカス ウィンドウ」(またはそれが呼び出すもの) を使用するためです。

EditorKit が提供するデフォルトのアクションを使用している場合、問題はありません。

JMenuItem pasteAction = new JMenuItem( new DefaultEditorKit.PasteAction() );
pastAction.setAccelerator(...);
于 2010-11-09T17:26:01.417 に答える