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

Agents de placement/Fenêtres Java Discussion :

[JFrame] récuperer le path du fichier glissé sur une JFrame ou JPanel


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut [JFrame] récuperer le path du fichier glissé sur une JFrame ou JPanel
    Bonjour,
    Ce que je fais faire est du drag and drop super je sais ce que je veux faire !
    maintenant comment faire ?
    alors ce que je veux c'est pouvoir glisser un fichier (un objet) EXTERNE et de recuperer son absolutepath, pour tester si c'est un fichier ou un dossier.
    j'ai vu plein d'exemple sur le drag and drop mais c'est toujours à l'interieur d'une fenetre jamais un objet intervient de l'exterieur.
    et j'ai vu aussi que le drag and drop fonctionne avec Jtable Jtree .. mais dans la liste que j'ai vu sur un site je me rappele plus le quel il n'ya pas JFrame ni JPanel (jpanel j suis pas sur).
    alors comment faire glisser le fichier sur une JFrame pour recuperer son chemin ?
    c'est du listening ?
    je vous pose la question, merci d'y repondre.
    aa du bocal
    merci aux swingeurs !

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par défaut
    Quand tu actives le DnD tu peux recevoir des donnees suivant differentes saveurs (voir java.awt.datatransfer.DataFlavor).

    Suivant la source de ton drag, ton programme peut donc recevoir soit .
    - un objet Java de type File, dans ce cas aucun truc particulier a faire.
    - du texte avec la saveur DataFlavor.javaFileListFlavor, ce sont donc normalement des chemins de fichier que tu peux transformer en File.
    - du texte avec la saveur DataFlavor.stringFlavor, a toi de voir si tu veux creer un File temporaire histoire de verifier que le texte recut correspond bien au chemin d'un fichier existant.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    Bonjour,
    Merci pour les mots clé, j'ai pu voir certains exemples sur le net mais ça m'a pas l'air convainquant puisque déja le code date de longtemps (pas mal de chose sont decapreted) voici le code :
    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
     
    class MyTransferHandler extends TransferHandler {
    		private static final long serialVersionUID = 1L;
     
    		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;
    		}
     
    		public boolean importData(JComponent cp, Transferable tr) {
    			if (this.hasFileFlavor(tr.getTransferDataFlavors())) {
    				try {
    					List files = (List) (tr
    							.getTransferData(DataFlavor.javaFileListFlavor));
    					String myList = "";
    					for (int i = 0; i < files.getSize().height; i++) {
    						File file = (File)files.get(i);
    						myList += file.getName() + "\n";
    					}
    					System.out.println(myList);
    					return true;
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    				return false;
    			}
    			if (this.hasStringFlavor(tr.getTransferDataFlavors())) {
    				try {
    					String myData = (String) (tr
    							.getTransferData(DataFlavor.stringFlavor));
    					System.out.println(myData);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    			return false;
    		}
     
    	}
    apres je met dans la JFrame :
    fenetre.setTransferHandler(new MyTransferHandler());
    mais ya juste un truc que je comprend pas dans la classe MyTransferHandler() c'est lorsque je fais this.hasFileFlavor.. il me pete l'erreur : Method undefined.. déja comme je vous ai dit ça date de longtemps les exemples que j'ai trouvé et moi je l'ai modifié pour afficher simplement le String de ce que j'ai glissé sur la fenetre si c'est un Objet File.
    F1 please !
    Source du code : http://mbaron.ftp-developpez.com/javase/dnd.pdf (Licence GPL)

  4. #4
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    up,

    Je suis revenu sur l'exemple de Sun mais apparament - JE CROIS - que ce n'est pas possible de glisser un fichier sur une JFrame il va falloir que je fasse sur un textArea ... et c'est trop moche, surtout que mon projet son metier c'est de prendre un fichier /etc/passwd par exemple et d'afficher chacune de ses valeurs (apres le split sur : ) dans une JTable.
    Donc le textArea ne m'arrange pas et je peux pas le faire sur la JTable directement vu qu'au lancement j'ai pas de JTable.
    pourquoi ils ont pas pensé à ajouter la méthode setDragEnabled(boolean) dans une JFrame :'( Franchement, je suis desesperé surtout que j'ai galeré avec ma JTable (concept du modele/vue) et à PRIORI je peux conclure que SWING c de la merde (ou il a beaucoup de composants complexes, pour etre moins vulgaire)
    Qu'est ce que vous pensez du code de mon avt dernier post ?

    Du help pliiizzzz

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par défaut
    Donc j'allais dire que java.awt.dnd ne concerne que la gestion des mouvements de drag'n drop de bas niveau (donc en general tu n'auras jamais a taper dedans) et que java.awt.datatransfer concerne les transactions d'objet de haut niveau.

    Quelques modifications et tests et j'ai obtenu ca qui fonctionne :

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    package test;
     
    import java.awt.datatransfer.*;
    import java.io.*;
    import java.util.*;
    import javax.swing.*;
    import java.awt.BorderLayout;
     
    /**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2006</p>
     *
     * <p>Company: </p>
     *
     * @author not attributable
     * @version 1.0
     */
    public class DragFrame extends JPanel {
      public DragFrame() {
        setTransferHandler(new MyTransferHandler());
      }
     
      public static void main(String ...args) {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new DragFrame();
        frame.setLayout(new BorderLayout());
        frame.add(panel, BorderLayout.CENTER);
        frame.setSize(400, 400);
        frame.setVisible(true);
      }
     
      private class MyTransferHandler extends TransferHandler {
        private static final long serialVersionUID = 1L;
     
        /**
         * {@inheritDoc}
         */
        @Override 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;
        }
     
        private boolean hasFileFlavor(DataFlavor[] df) {
          boolean result = false;
          for (DataFlavor flavor : df) {
            result = DataFlavor.javaFileListFlavor.equals(flavor);
            if (result) {
              break;
            }
          }
          return result;
        }
     
        private boolean hasStringFlavor(DataFlavor[] df) {
          boolean result = false;
          for (DataFlavor flavor : df) {
            result = DataFlavor.stringFlavor.equals(flavor);
            if (result) {
              break;
            }
          }
          return result;
        }
     
        /**
         * {@inheritDoc}
         */
        @Override public boolean importData(JComponent cp, Transferable tr) {
          if (this.hasFileFlavor(tr.getTransferDataFlavors())) {
            try {
              List files = (List) (tr.getTransferData(DataFlavor.javaFileListFlavor));
              StringBuilder builder = new StringBuilder();
              for (int i = 0; i < files.size(); i++) {
                File file = (File) files.get(i);
                builder.append(file.getAbsolutePath()).append("\n");
              }
              System.out.println(builder.toString());
              return true;
            }
            catch (Exception e) {
              e.printStackTrace();
            }
            return false;
          }
          if (this.hasStringFlavor(tr.getTransferDataFlavors())) {
            try {
              String myData = (String) (tr.getTransferData(DataFlavor.stringFlavor));
              System.out.println(myData);
            }
            catch (Exception e) {
              e.printStackTrace();
            }
          }
          return false;
        }
      }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    Bonsoir,
    Merci beaucoup, effectivement j'ai presque comme toi, et pour eviter la galere aux autres voici un exemple super bien clair !
    http://www.java2s.com/Code/Java/Swin...mDragnDrop.htm
    Merci à vous.

  7. #7
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut Une autre aventure lol
    Bonsoir,
    Et bien maintenant que je sais "activer" le Drag j'aimerais bien aussi le desactiver a certains moment.
    c'est a dire que lorsque j'ouvre un fichier "dragué" je veux plus faire du drag sur ma JFrame sachant que pour l'activer je fais :
    setTransferHandler(new MyTransferHandler( (JComponent) getContentPane());
    en reflichissant un TOUT PTI peu PAS BEAUCOUP lol j'ai essayé de faire
    setTransferHandler(null); apres l'ouvreture du fichier dragué et bien NIET !
    ça marche pas ! et la je suis entrain de chercher pour maitriser mon drague
    merci de me donner encore un pti bout de ficelle et comme d'hab je continue de mon coté et je vous informerai des que je trouverai !

    bon il est temps de dodoter un ti peu.

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

Discussions similaires

  1. [débutant]Afficher une image sur une JFrame
    Par mavina dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 09/08/2006, 16h25
  2. [Debutant] Ouvrir un fichier Excel dans une JFrame
    Par Nico+10) dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 27/07/2006, 14h06
  3. Exécuter un fichier .BAT sur une machine distante
    Par ruff15 dans le forum Windows
    Réponses: 4
    Dernier message: 14/09/2005, 11h44
  4. [AWT] JFrame - Mettre une taille minimum sur une Jframe
    Par rabobsky dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 27/07/2005, 18h20
  5. [Icon] logo sur une JFrame
    Par ibou2610 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 30/07/2004, 10h45

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