2010-12-03 4 views
1

Je voudrais ajouter un bouton à mon interface utilisateur qui copie le contenu d'une table spécifique dans le presse-papiers. Je pense que cela devrait être facile, mais je n'arrive pas à le faire fonctionner ou à trouver la solution sur Internet. J'ai essayé ceci:Java Swing - copier par programmation dans un presse-papiers à partir d'un JTable

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

mais cela n'a aucun effet. Quel est le meilleur moyen d'y parvenir? Merci, Peter

+0

Je devrais dire que 'fileTable' est un JTable et' jButton1ActionPerformed' est la méthode appelée quand le bouton est enfoncé. –

Répondre

2

Merci à tous ceux qui ont répondu. J'ai fait un peu de traçage à travers le code Swing avec le débogueur. Je crois que le code que j'ai posté et ce que camickr a posté finissent par faire la même chose. Le problème était que je supposais que 'aucune sélection' dans le tableau copierait tout. En fait c'est un no-op - c'est dans BasicTableUI.java si quelqu'un est intéressé. Donc, ce code fonctionne:

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

Dans mon code actuel, j'ai ajouté des lignes pour sauvegarder la sélection actuelle avant selectAll() puis restaurer.

+0

Vous copiez mon code (qui fonctionne) et acceptez votre réponse? Je m'en souviendrai la prochaine fois que vous poserez une question. D'ailleurs, votre code ne fonctionne même pas. Il va générer un NPE. – camickr

+0

Non, j'ai copié mon code à partir de la question et inséré la ligne fileTable.selectAll(). Cependant vous avez raison sur le NPE, je (qui sait pourquoi) mis-copié le paramètre de commande et mis "" au lieu de "copier". Merci d'avoir fait remarquer cela. –

+1

'Votre' code est le même que 'mon' code original - il ne copie rien s'il n'y a pas de sélection. Par conséquent, il n'a pas répondu à mon problème. Cependant, j'ai expliqué cela dans ma réponse et j'ai voté votre réponse, donc, si vous pensez que vous avez été insuffisamment crédité, alors je suis désolé pour vous. –

5

Tous les composants Swing contiennent des actions appelées par KeyStrokes. Vous pouvez réutiliser cette action. Pour une liste de toutes les actions, consultez le Key Bindings.

Questions connexes