2011-01-08 15 views
0

I-Code wie dieses:One jPopup für mehrere Kontrollen

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

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

und für Menüpunkte Ich habe Aktionen aus:

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

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

Jetzt denke ich, es wäre besser, ein Pop-up für den gesamten Text zu verwenden, Komponenten, wie Informationen übergeben werden, welche Komponente angeklickt wurde, um Text zu kopieren? Vielleicht gibt es für diesen Fall eine allgemeinere Lösung?

Antwort

1

Aktionen sollten durch Erweitern von TextAction erstellt werden. Die TextAction-Klasse verfügt über eine Methode, die die Textkomponente zurückgibt, die den letzten Fokus hat. Diese Aktion kann dann in einem Popup-Menü oder in einem Menü verwendet werden, das zur Menüleiste hinzugefügt wurde. So ist der Grund Code den Menüpunkt zu erstellen wäre:

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

jedoch seine noch einfacher als das, weil die DefaultEditorKit bereits eine Aktion Standardkopie bietet so alles, was Sie tun müssen, ist:

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

Die Ereignisklasse verfügt über eine getSource() -Methode, die angibt, welche Komponente die Ursache des Ereignisses war.

+0

ja , aber die Quelle ist der Menüeintrag selbst, nicht der Textbereich. – camickr