OVH Cloud OVH Cloud

Couper, copier, coller...

2 réponses
Avatar
Thibaut Desmarest
Bonjour,

je me pose une question bête :

La plupart des composants Swing gèrent le copier coller, mais ceci est
"natif" à Java. Qu'en est t'il si l'on veut faire soi même un couper, un
copier ou un coller ? Comment s'interfacer avec le clipboard que java
utilise ?

Et si l'on fait un menu edition dans la barre de menu avec un bouton
copier par exemple. Comment savoir quel composant swing doit être la
cible de la copie ?

Je ne vois pas trop comment faire tout ça, alors si quelqu'un a une idée...


Merci d'avance,


Thibaut

2 réponses

Avatar
Eric Frigot
Thibaut Desmarest wrote:
Bonjour,

je me pose une question bête :

La plupart des composants Swing gèrent le copier coller, mais ceci est
"natif" à Java. Qu'en est t'il si l'on veut faire soi même un couper, un
copier ou un coller ? Comment s'interfacer avec le clipboard que java
utilise ?

Et si l'on fait un menu edition dans la barre de menu avec un bouton
copier par exemple. Comment savoir quel composant swing doit être la
cible de la copie ?

Je ne vois pas trop comment faire tout ça, alors si quelqu'un a une idée...


Merci d'avance,


Thibaut



Regardes du côté de Toolkit.getSystemClipboard() qui te renvoit le
clipboard du système.

Ensuite, si tu fais un menu avec les 3 boutons cut/copy/paste, tu peux
les gérer comme suit :

if (arg0.getSource() == this.cut) { // Cut action
StringSelection sc = new
StringSelection(this.field.getSelectedText());

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sc, sc);
this.field.replaceSelection("");
}
else if (arg0.getSource() == this.cut) { // Copy action
StringSelection sc = new
StringSelection(this.field.getSelectedText());

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sc, sc);
}
else if (arg0.getSource() == this.paste) { // Paste action
try {
Transferable t =
Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
if (t != null &&
t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
String toPaste = (String)
t.getTransferData(DataFlavor.stringFlavor);
if (this.field.getSelectedText() != null)
this.field.replaceSelection(toPaste);
else {
String start = this.field.getText(0,
this.field.getCaretPosition());
String end =
this.field.getText().substring(this.field.getCaretPosition());
this.field.setText(start + toPaste + end);
}
}
}
catch (Exception ex) {}
}

Désolé pour l'indentation, ici je gère les actions uniquement sur le
field (un JTextField).

Si tu veux savoir quel composant est conserné utilise les coordonnées de
ta souris pour récupérer le bon composant sur ton panel

Eric.

Avatar
Thibaut Desmarest
Si tu veux savoir quel composant est conserné utilise les coordonnées de
ta souris pour récupérer le bon composant sur ton panel


Ben non justement puisque je rappelle que le probleme vient du fait que
le raccourci couper/copier/coller doit se trouver dans le menu edition,
comme sous word ou eclipse ou n'importe quel logiciel. Donc si on clique
dans le menu la souris est sur le menu...

Non ?


Eric.