Interface Graphique en Java Presse-papier et Drag and Drop

Formation JAVA, tutoriel & guide de travaux pratiques en pdf.

Le presse-papier

●le Clipboard sert à stocker des données pour faire du copier/couper/coller
● presse-papier système:
Toolkit toolkit=Toolkit.getDefaultToolkit();
Clipboard clipboard=toolkit.getSystemClipboard();
● presse-papier de sélection (ne marche pas sur tous les systèmes):
Toolkit toolkit=Toolkit.getDefaultToolkit();
Clipboard clipboard=toolkit.getSystemSelection();
● on peut aussi en créer:
Clipboard c=newClipboard(« biniou »);
● récupération du contenu:
public static voidmain(String[] args) {
finalJFrame f = newJFrame(« Clipboard paste demonstration »);
finalJDesktopPane desktop=newJDesktopPane();
JButton paste=newJButton(« Paste system clipboard content »);
Toolkit toolkit=Toolkit.getDefaultToolkit();
finalClipboard clipboard=toolkit.getSystemClipboard();
paste.addActionListener(newActionListener() {
@Override
public voidactionPerformed(ActionEvent e) {
if(clipboard.isDataFlavorAvailable(DataFlavor.imageFlavor)) {
desktop.add(createInternalFrame(« Image »,getPastedImage(clipboard)));
}
else if(clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) {
desktop.add(createInternalFrame(« Text »,getPastedText(clipboard)));
}
else if(clipboard.isDataFlavorAvailable(DataFlavor.javaFileListFlavor)) {
desktop.add(createInternalFrame(« Files »,getPastedFiles(clipboard)));
}
}
});
finalDefaultListModel model=newDefaultListModel();
updateModel(clipboard,model);
f.getContentPane().add(newJScrollPane(newJList(model)),BorderLayout.WEST);

}

Mettre du contenu personnalisé

● on peut mettre ce que l’on veut dans le presse-papier, pour peu que l’on définisse une classe de représentation qui implémente Transferable:
– Object getTransferData(DataFlavor flavor)
● obtenir les données sous une forme précise
– DataFlavor[] getTransferDataFlavors()
● obtenir la liste des DataFlavor supportées par les données
– boolean isDataFlavorSupported(DataFlavor f)

Mettre du contenu personnalisé

● application: utiliser des JPopupMenu pour couper/coller des JButton
● création de boutons avec des listeners sérialisables:
static abstract classSerializableActionListener implementsActionListener,Serializable {
/* We just need to indicate that we want a serializable ActionListener */
}
final staticRandom random=newRandom();
private staticComponent createButton(String title,finalString message) {
intn=random.nextInt(1000);
JButton b=newJButton(title+ » « +n);
/* We don’t want to inheritate the JPanel popup menu */
b.setInheritsPopupMenu(false);
b.setComponentPopupMenu(cutPopup);
finalString id= »Message ID: « +n;
b.addActionListener(newSerializableActionListener () {
@Override public voidactionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,message,id,JOptionPane.INFORMATION_MESSAGE);
}
});
returnb;
}

Mettre du contenu personnalisé

● création de l’action « Cut »: on enlève le bouton de son panel et le met dans le  presse-papier
finalAction cut=newAbstractAction(« Cut button ») {
@Override
public voidactionPerformed(ActionEvent e) {
JButton b=(JButton)cutPopup.getInvoker();
/* We don’t want the popup menu to be serialized, since we
* have a static final reference on it. Better to restore it
* at paste time.
*/
b.setComponentPopupMenu(null);
JPanel p=(JPanel)b.getParent();
p.remove(b);
p.revalidate();
p.repaint();
try{
clipboard.setContents(newButtonSelection(b),null);
} catch(IllegalStateException e1) {
/* Do nothing */
}
}
};
cutPopup.add(newJMenuItem(cut));

…….

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Presse-papier et Drag and Drop (507 KO) (Cours PDF)
Interface Graphique en Java

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *