DataFlavor
et Transferable
personnalisés
Le but est ici de créer sa propre saveur de données (DataFlavor) pour transférer la couleur d’arrière plan d’un composant à un autre. On pourrait très bien utiliser les propriétés JavaBeans mais nous souhaitons également pouvoir transférer la couleur sous forme de texte vers des applications externes ou des composants qui ne supportent que le format texte.
Pour créer un DataFlavor, il faut préciser la classe correspondante. Nous utiliserons ici la classe Couleur définie dans le fichier Couleur.java.
Question 5.
En vous aidant du cours, créez une classe TransferableCouleur
qui implémente l’interface Transferable
afin de définir le DataFlavor couleurFlavor et les méthodes d’accès aux données.
Question 6.
Définissez maintenant la classe TransfertCouleur
qui hérite de TransferHandler qui permet d’importer et exporter des données de type Couleur
.
Question 7. Testez le drag and drop et copier-coller de couleurs entre composants Java et avec des applications externes.
La saveur de données pour le transfert d’images est donnée par DataFlavor
.
imageFlavor
. Il vous reste cependant à écrire les Transferable
et TransferHandler
correspondants.
Question 8.
En vous inspirant des questions précédentes, écrivez TransferableImage
implémentant l’interface Transferable
et ImageHandler
qui hérite de la classe TransferHandler
.
Question 9.
Ecrivez une application de test avec deux labels auxquels vous aurez affecté une image avec la méthode setIcon
. Il doit être possible de faire un drag and drop d’un label à l’autre pour remplacer l’image initiale; de faire un DnD d’un label vers une application externe pour copier l’image d’un label; et de faire un DnD d’une application externe (type firefox) vers un des deux labels pour remplacer l’image du label.
Question 10.
Modifiez les méthodes canImport
et importData
de la classe
ImageHandler
afin de pouvoir ouvrir une image glissée du gestionnaire de fichier sur un label. Pour cela vous ajouterez le support pour le DataFlavor
.
javaFileListFlavor
dans la méthode canImport
. Pour modifier la méthode importData
, les lignes de code suivantes permettent de récupérer le premier nom de fichier avec le chemin absolu d’une liste de fichiers déposée sur un composant.
String filename = ""; List files = (List) (t.getTransferData(DataFlavor.javaFileListFlavor)); filename = ((File)files.get(0)).getAbsolutePath(); |