2011-01-08 1 views
0

у меня есть такой код:Один jPopup несколько элементов управления

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

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

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

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

JMenuItem copy = new JMenuItem(new DefaultEditorKit.CopyAction()); 
1

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

+0

да , но источником будет сам пункт меню, а не текстовая область. – camickr