2010-12-03 9 views
1

Ich möchte meiner Benutzeroberfläche eine Schaltfläche hinzufügen, die den Inhalt einer bestimmten Tabelle in die Zwischenablage kopiert. Ich denke, das sollte einfach sein, aber ich kann es nicht zur Arbeit bringen oder die Lösung im Internet finden. Ich habe das versucht:Java Swing - programmgesteuert von einer JTable in die Zwischenablage kopieren

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
ActionEvent nev = new ActionEvent(fileTable, ActionEvent.ACTION_PERFORMED, "copy"); 
TransferHandler.getCopyAction().actionPerformed(nev); 
} 

aber es hat keinen Effekt. Was ist der beste Weg, dies zu erreichen? Danke, Peter

+0

Ich sollte sagen, dass 'fileTable' ist eine JTable und 'jButton1ActionPerformed' ist die Methode, die aufgerufen wird, wenn die Schaltfläche gedrückt wird. –

Antwort

2

Danke an alle, die geantwortet haben. Ich habe etwas mit dem Debugger durch den Swing-Code verfolgt. Ich glaube, dass der Code, den ich gepostet habe und was camickr gepostet hat, im Grunde dasselbe ist. Das Problem war, dass ich annahm, dass "keine Auswahl" in der Tabelle alles kopieren würde. In der Tat ist es ein No-Op - das ist in BasicTableUI.java, wenn jemand interessiert ist. Also dieser Code funktioniert:

ActionEvent nev = new ActionEvent(fileTable, ActionEvent.ACTION_PERFORMED, "copy"); 
fileTable.selectAll(); 
fileTable.getActionMap().get(nev.getActionCommand()).actionPerformed(nev); 

In meinem eigentlichen Code, den ich Zeilen hinzugefügt haben, bevor selectAll() die aktuelle Auswahl zu speichern und dann wiederherstellen.

+0

Sie kopieren meinen Code (was funktioniert) und akzeptieren Sie Ihre Antwort? Ich werde mich daran erinnern, wenn du das nächste Mal eine Frage postest. Übrigens funktioniert dein Code nicht einmal. Es wird eine NPE generieren. – camickr

+0

Nein, ich habe meinen Code aus der Frage kopiert und die Zeile fileTable.selectAll() eingefügt. Wie auch immer, Sie haben Recht mit der NPE, ich (wer weiß warum) hat den Befehlsparameter falsch kopiert und stattdessen "" anstelle von "kopieren" gesetzt. Danke, dass du darauf hingewiesen hast. –

+1

"Ihr" Code entspricht dem "Originalcode" - er kopiert nichts, wenn keine Auswahl vorhanden ist. Deshalb hat es mein Problem nicht beantwortet. Wie auch immer, ich habe das in meiner Antwort erklärt, und ich habe Ihre Antwort gewählt, also, wenn Sie das Gefühl haben, dass Sie nicht ausreichend berücksichtigt wurden, dann tut es mir leid. –

5

Alle Swing-Komponenten enthalten Aktionen, die von KeyStrokes aufgerufen werden. Sie können diese Aktion erneut verwenden.

Action copy = table.getActionMap().get("copy"); 
ActionEvent ae = new ActionEvent(table, ActionEvent.ACTION_PERFORMED, ""); 
copy.actionPerformed(ae); 

Eine Liste aller Aktionen überprüfen Sie die Key Bindings aus.

Verwandte Themen