IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Drag & drop Fichier


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Par défaut Drag & drop Fichier
    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 :
    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();
    				}
    			}
    L'activation du drag et drop du JTextArea :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    messageField.setDragEnabled(true);
    		messageField.setTransferHandler(new FileNameTransferHandler());
    Et voici le traitement du drag & drop :
    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;
    	}	
    }
    Est ce que quelqu'un aurait la petite idée pour régler ce petit problème ?

    Merci bien

    Dasson

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 96
    Par défaut
    C'est bon j'ai trouvé un moyen de faire du drag & drop avec transfert de fichier.

    J'envoie tout simplement en paramètre de mon constructeur le JfileChoose et le bouton qui appelle le jfilechooser et je fais la petite manipulation qu'il faut.

    Je pense que le bout de code sera plus parlant ^^

    Classe custom de TransferHandler
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    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;
     
    	private JFileChooser fileChooser;
    	private JButton button;
     
    	public FileNameTransferHandler(JFileChooser open, JButton button){
    		this.fileChooser = open;
    		this.button = button;
    	}
     
    	/*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();
    						fileChooser.setSelectedFile(file);
    						button.doClick();
    					}
    					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;
    	}	
    }
    Dans ma fenetre de chat :

    - Init du drag & drop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    messageField.setDragEnabled(true);
    		messageField.setTransferHandler(new FileNameTransferHandler(open,button2));
    		messageField.setDropMode(DropMode.INSERT);
    Et la demande d'envoie de fichier :
    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
    if (source == button2){
    			if(open.getSelectedFile()==null){
    				int retour = open.showOpenDialog(this);
    				if(retour == JFileChooser.APPROVE_OPTION){
    					file = open.getSelectedFile();
    				}	
    			}
    			else{
    				file = open.getSelectedFile();
    				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();
    				}
    			}
    Dasson

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AIR] Drag and drop fichier -> explorateur
    Par cocacola0589 dans le forum Flex
    Réponses: 1
    Dernier message: 07/08/2011, 14h19
  2. [VB.NET] Drag and Drop d'un fichier sur un objet Panel
    Par Mü dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/11/2005, 12h30
  3. Savoir ou est deposé un fichier dans un drag and drop ?
    Par mkdual dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 24/08/2005, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo