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

Composants Java Discussion :

Drag 'n drop d'un JTree vers un JLabel


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Par défaut Drag 'n drop d'un JTree vers un JLabel
    bonjour

    je voudrais faire un drag'n drop d'un jtree vers un jlabel contenant une image.
    je sais que c'est possible car je l'ai déjà fait, "in vitro", c'est-à-dire dans un projet à part dédié seulement à celà.

    mais lorsque je transpose le code vers mon projet principal, je peux faire le drag à partir du jtree (l'icône de la souris change) mais pour le drop vers le jlabel, l'icône devient un "panneau de sens interdit".
    j'ai bien comparé les 2 codes, je ne vois aucune différence, l'erreur doit venir d'autre part mais je ne vois pas d'où.

    voici le code :

    dans Fenetre.java (classe affichant le fenêtre principale)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    JLabel lbl_poub_local = new JLabel(new ImageIcon("ressources/corbeille.jpg"));
    		lbl_poub_local.setBounds(490, 46, 150, 150);
    		lbl_poub_local.setName("poubelle2");
    		lbl_poub_local.setTransferHandler(new TreeTH(tree_local));
    TreeTH, la classe étendant TransfertHandler, sert à implémenter le drop sur l'image du jlabel
    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
    public class TreeTH extends TransferHandler {
     
    	private static final DataFlavor flavors[] = { TreeElementsTransferableTransferableFactory.getTreeElemFlavor() };
    	public JTree tree = null;
     
    	public TreeTH(JTree tree) {
    		super();
    		this.tree = tree;
    		System.out.println("dans le constructeur de TreeTH : " + this.tree);
    		try {
    			Thread.sleep(3000);
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    	/*
    	 * DROP
    	 */
     
    	@Override
    	public boolean importData(JComponent comp, Transferable t) {
     
    		System.out.println("drop poubelle : dans la méthode importData");
    		if (comp.getName().contains("poubelle")) {
     
    			TreeElementsTransferable sel = null;
    			try {
    				sel = (TreeElementsTransferable) t.getTransferData(TreeElementsTransferableTransferableFactory
    						.getTreeElemFlavor());
    			} catch (UnsupportedFlavorException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
     
    			DefaultTreeModel bm = (DefaultTreeModel) (tree.getModel());
    			bm.removeNodeFromParent((DefaultMutableTreeNode) sel.chemin.getLastPathComponent());
    			bm.reload();
    			expandAll(tree, true);
    			return true;
    		}
     
    		return false;
     
    	}
     
    	@Override
    	public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
     
    		System.out.println("dans canImport");
    		for (int i = 0, n = transferFlavors.length; i < n; i++)
    			for (int j = 0, m = flavors.length; j < m; j++)
    				if (flavors[j].equals(transferFlavors[i])) {
    					return true;
    				}
     
    		return false;
     
    	}
    MonTH.java, code du drag, à partir du jtree:
    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
    /*
    	 * DRAG
    	 */
    	@Override
    	public int getSourceActions(JComponent c) {
    		return TransferHandler.COPY;
    	}
     
    	@Override
    	protected Transferable createTransferable(JComponent c) {
     
    		System.out.println("drag : " + c.getName());
    		if (c.getName().contains("lis")) {
     
    			System.out.println(((JList) c).getName());
    			String genre = null;
    			String texte = null;
    			// retour : il y a une valeur retournee
    			boolean retour = false;
    			JList la_liste = (JList) c;
     
    			if ((la_liste.getName().contains("lis")) && (la_liste.getName().contains("sites"))) {
    				genre = "site";
    				retour = true;
    			}
     
    			if ((la_liste.getName().contains("lis")) && (la_liste.getName().contains("types"))) {
    				genre = "type";
    				retour = true;
    			}
     
    			if (!retour)
    				return null;
     
    			texte = (String) la_liste.getSelectedValue();
    			return new SelectionTransferable(genre, texte);
     
    		} else if (c.getName().contains("tree")) {
     
    			JTree tree = (JTree) c;
    			DefaultMutableTreeNode noeud = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    			if (noeud.getLevel() == 1) {
    				// c'est un site
    				System.out.println("MonTH drag, site : " + getPath(noeud));
    				return new TreeElementsTransferable(getPath(noeud));
    			}
    			if (noeud.getLevel() == 2) {
    				// c'est un type
    				System.out.println("MonTH drag, type : " + getPath(noeud));
    				return new TreeElementsTransferable(getPath(noeud));
    			}
     
    		}
     
    		return null;
     
    	}
    je peux vous expliquer si il y a du code à détailler.

    merci,

    olivier

    ps : le code dans le constructeur de TreeTH ne semble pas s"exécuter (le system.out.writeln n'envoie rien à la console)

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Par défaut
    c"est résolu!

    le code était presque bon : j'ai changé la classe à instancier, au lieu de TreeTH j'utilise GUI.TreeTH, car j'avais 2 classes TreeTH, une pour le projet in vitro et l'autre pour le projet principal (dans le paquetage GUI).

    olivier

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

Discussions similaires

  1. Drag and Drop d'un JTree vers un JPanel
    Par Furlaz dans le forum Composants
    Réponses: 2
    Dernier message: 29/08/2013, 02h38
  2. (jlist,jtree) drag and drop entre 2 jlist vers un jtree
    Par olivier57b dans le forum Composants
    Réponses: 0
    Dernier message: 17/04/2012, 16h20
  3. Réponses: 2
    Dernier message: 08/11/2006, 18h13
  4. Drag and Drop sur une JTree
    Par Xhéras dans le forum Composants
    Réponses: 5
    Dernier message: 07/07/2006, 12h09
  5. Drag and drop sur un JTree
    Par tomca dans le forum Composants
    Réponses: 4
    Dernier message: 02/08/2005, 10h54

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