0

次のようなコードがあります。

    jTextArea1.add(jPopupMenu1);
    jTextArea1.setComponentPopupMenu(jPopupMenu1);

    jTextField1.add(jPopupMenu2);
    jTextField1.setComponentPopupMenu(jPopupMenu2);

メニュー項目にはアクションがあります:

private void CopyActionPerformed(java.awt.event.ActionEvent evt) {
  jTextArea1.copy();

}
private void Copy1ActionPerformed(java.awt.event.ActionEvent evt) {
    jTextField1.copy();
}

すべてのテキスト コンポーネントに対して 1 つのポップアップを使用する方がよいと思います。テキストをコピーするためにクリックされたコンポーネントに関する情報を渡すにはどうすればよいですか? そのような場合のより一般的な解決策があるのでしょうか?

4

2 に答える 2

1

アクションは、TextActionを拡張して作成する必要があります。TextActionクラスには、最後にフォーカスがあったテキストコンポーネントを返すメソッドがあります。このアクションは、ポップアップメニューまたはメニューバーに追加されたメニューで使用できます。したがって、メニュー項目を作成するための基本的なコードは次のようになります。

JMenuItem copy = new JMenuItem( new CustomAction() );

ただし、DefaultEditorKitはすでにデフォルトのコピーアクションを提供しているため、それよりもさらに簡単です。必要なのは次のとおりです。

JMenuItem copy = new JMenuItem( new DefaultEditorKit.CopyAction() );
于 2011-01-09T04:45:55.510 に答える
1

Event クラスには、どのコンポーネントがイベントの原因であったかを示す getSource() メソッドがあります。

于 2011-01-08T22:35:40.633 に答える