Previous Up Next

3  DataFlavor et Transferable personnalisés

3.1  Transfert de couleurs

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.

3.2  Transfert d’images

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.


Figure 4: Transfert d’images.

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();

Previous Up Next