Один jPopup для нескольких элементов управления - PullRequest
0 голосов
/ 09 января 2011

У меня есть такой код:

    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();
}

Теперь я думаю, что было бы лучше использовать одно всплывающее окно для всех текстовых компонентовКак передать информацию о том, какой компонент был нажат для копирования текста?Может быть, есть какое-то более общее решение для такого случая?

Ответы [ 2 ]

1 голос
/ 09 января 2011

Действия должны быть созданы путем расширения TextAction. Класс TextAction имеет метод, который возвращает текстовый компонент, который в последний раз имеет фокус. Это действие затем можно использовать во всплывающем меню или в меню, добавленном в строку меню. Таким образом, основной код для создания пункта меню будет:

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

Однако это даже проще, чем это, потому что DefaultEditorKit уже обеспечивает действие копирования по умолчанию, поэтому все, что вам нужно сделать, это:

JMenuItem copy = new JMenuItem( new DefaultEditorKit.CopyAction() );
1 голос
/ 09 января 2011

В классе Event есть метод getSource (), который сообщает вам, какой компонент был причиной события.

...