Bonjour
Je fait actuellement du drag & drop dans une fenetre de chat sur un JTextArea avec un fichier que j'aimerai envoyé à la personne avec laquelle je suis en discussion.
Pour le moment j'ai réussi à faire du dnd en récupérant le chemin du fichier que je veux envoyer dans le jtextarea.
J'aurai voulu savoir si en faisant un drop d'un fichier sur mon textarea d'automatiser l'envoie d'un fichier ? La réponse est oui car tout le monde le fait sur du msn ou google talk. Mais j'aurai voulu savoir comment.
Pour l'instant l'appelle de l'envoie de fichier s'effectue en appyant sur un bouton :
L'activation du drag et drop du JTextArea :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 if (source == button2){ int retour = open.showOpenDialog(this); if(retour == JFileChooser.APPROVE_OPTION){ file = open.getSelectedFile();//selection du fichier a envoyer try{ String size = ""+(int)file.length()/1024+" KB"; String name = file.getName(); //Envoie d'un message pour la proposition d'envoie de fichier (commande 1) jabberModel.sendMessage(jabberid+"@"+jabberModel.getServerName(), null, "thread_chat", "chat", null, new String(ListCommand.getCommande(1))+""+name+" ("+size+")"); } catch(Exception ex){ ex.printStackTrace(); } }
Et voici le traitement du drag & drop :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 messageField.setDragEnabled(true); messageField.setTransferHandler(new FileNameTransferHandler());
Est ce que quelqu'un aurait la petite idée pour régler ce petit problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 package main.users.chat; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.List; import javax.swing.*; public class FileNameTransferHandler extends TransferHandler { private static final long serialVersionUID = 58L; /*Cette méthode détermine le type d'objet qu'on peut importer*/ public boolean canImport(JComponent cp, DataFlavor[] df){ for(int i = 0; i < df.length; i++){ if(df[i].equals(DataFlavor.javaFileListFlavor)) return true; if(df[i].equals(DataFlavor.stringFlavor)) return true; } return false; } /*Cette méthode importe les donnée vers les composant graphique*/ public boolean importData(JComponent cp, Transferable df){ DataFlavor[] flavors = df.getTransferDataFlavors(); for(int i = 0; i < flavors.length; i++){ try{ if(flavors[i].equals(DataFlavor.javaFileListFlavor)){ List<File> l = (List<File>)df.getTransferData(DataFlavor.javaFileListFlavor);//unchecked cast Iterator<File> iter = l.iterator(); while(iter.hasNext()){ File file = iter.next(); ((JTextArea)cp).setText(file.getCanonicalPath());//ecriture du path dans le textarea } return true; } else if(flavors[i].equals(DataFlavor.stringFlavor)){ String fileOrURL = (String)df.getTransferData(flavors[i]); try{ URL url = new URL(fileOrURL); ((JTextArea)cp).setText(url.getPath());//ecriture du path dans le textarea } catch(MalformedURLException ex){ return false; } } } catch(IOException ex){ System.err.println("IOError getting data: " + ex); } catch(UnsupportedFlavorException e){ System.err.println("Unsupported Flavor: " + e); } } return false; } }
Merci bien
Dasson
Partager