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 :

(jlist,jtree) drag and drop entre 2 jlist vers un jtree


Sujet :

Composants Java

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Points : 213
    Points
    213
    Par défaut (jlist,jtree) drag and drop entre 2 jlist vers un jtree
    bonsoir

    j'aimerais créer un drag and drop entre 2 jlist et un jtree.
    une des 2 jlist est la liste des "sites", destinés à être des enfants du noeud root dans l'arbre.
    la 2e jlist est la liste des "types", dont la place est d'être des enfants de noeuds "sites" dans l'arbre.

    ainsi par ex on a:
    (voir image jointe)

    lorsque je lance mon programme j'ai le drag à partir des jlist qui se fait (curseur de drag and drop - insertion) mais si je passe le curseur sur le jtree le curseur devient un panneau d'interdiction du drag and drop.
    pourtant la méthode canImport du transfertHandler renvoie true...

    voici mon code:

    Fenetre.java
    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
    109
    110
    111
    package GUI.DnD_what_is_exported_from_jlist;
     
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
     
    import javax.swing.DefaultListModel;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.JTree;
    import javax.swing.border.EmptyBorder;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeSelectionModel;
     
    public class Fenetre extends JDialog {
     
    	private final JPanel contentPanel = new JPanel();
    	final private JTextField tfi_texte;
     
    	/**
             * Launch the application.
             */
    	public static void main(String[] args) {
    		try {
    			Fenetre dialog = new Fenetre();
    			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    			dialog.setVisible(true);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    	/**
             * Create the dialog.
             */
    	public Fenetre() {
    		setBounds(100, 100, 452, 322);
    		getContentPane().setLayout(new BorderLayout());
    		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
    		getContentPane().add(contentPanel, BorderLayout.CENTER);
    		contentPanel.setLayout(null);
     
    		final JList lis_sites = new JList();
    		lis_sites.setName("lis_sites");
    		lis_sites.setBounds(10, 49, 175, 72);
    		lis_sites.setTransferHandler(new MonTH());
    		contentPanel.add(lis_sites);
     
    		tfi_texte = new JTextField();
    		tfi_texte.setBounds(195, 47, 86, 20);
    		contentPanel.add(tfi_texte);
    		tfi_texte.setColumns(10);
    		tfi_texte.setDragEnabled(true);
    		{
    			JPanel buttonPane = new JPanel();
    			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
    			getContentPane().add(buttonPane, BorderLayout.SOUTH);
    			{
    				JButton okButton = new JButton("OK");
    				okButton.setActionCommand("OK");
    				buttonPane.add(okButton);
    				getRootPane().setDefaultButton(okButton);
    			}
    			{
    				JButton cancelButton = new JButton("Cancel");
    				cancelButton.setActionCommand("Cancel");
    				buttonPane.add(cancelButton);
    			}
    		}
     
    		// add item into the jlist
    		DefaultListModel<String> model = new DefaultListModel<>();
    		lis_sites.setModel(model);
    		model.add(0, "mario");
     
    		// DnD
    		lis_sites.setDragEnabled(true);
     
    		JTree tree = new JTree();
    		tree.setBounds(195, 78, 72, 64);
    		contentPanel.add(tree);
    		DefaultTreeModel mod_tree = new DefaultTreeModel(new DefaultMutableTreeNode("root"));
    		tree.setModel(mod_tree);
    		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    		// DnD
    		tree.setDragEnabled(true);
     
    		JList lis_types = new JList();
    		lis_types.setName("lis_types");
    		lis_types.setBounds(10, 168, 174, 72);
    		lis_types.setTransferHandler(new MonTH());
    		contentPanel.add(lis_types);
    		// add item into the jlist
    		DefaultListModel<String> model_types = new DefaultListModel<>();
    		lis_types.setModel(model);
    		model.add(0, "kart");
     
    		JLabel lblSites = new JLabel("SITES");
    		lblSites.setBounds(10, 24, 46, 14);
    		contentPanel.add(lblSites);
     
    		JLabel lblTypes = new JLabel("TYPES");
    		lblTypes.setBounds(10, 143, 46, 14);
    		contentPanel.add(lblTypes);
     
    	}
    }
    mon TH.java (TH=transfertHandler)
    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
    109
    110
    111
    package GUI.DnD_what_is_exported_from_jlist;
     
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.io.IOException;
     
    import javax.swing.JComponent;
    import javax.swing.JList;
    import javax.swing.JTree;
    import javax.swing.TransferHandler;
    import javax.swing.tree.DefaultMutableTreeNode;
     
    public class MonTH extends TransferHandler {
     
    	private static final DataFlavor flavors[] = { SelectionTransferableFactory.getSelTransFlavor() };
     
    	/*
    	 * DROP
    	 */
    	@Override
    	public boolean importData(JComponent comp, Transferable t) {
     
    		SelectionTransferable sel = null;
    		try {
    			sel = (SelectionTransferable) t.getTransferData(SelectionTransferableFactory.getSelTransFlavor());
    		} catch (UnsupportedFlavorException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		JTree tree = (JTree) comp;
     
    		int niveau = 0;
    		if (tree.getSelectionPath().getParentPath().toString().equals("root")) {
    			niveau = 1;
    		}
    		if (tree.getSelectionPath().getParentPath().getParentPath().toString().equals("root")) {
    			niveau = 2;
    		}
     
    		if ((niveau == 1) && (sel.getGenre().equals("site"))) {
    			DefaultMutableTreeNode noeud = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    			noeud.add(new DefaultMutableTreeNode(sel.getTexte()));
    			return true;
    		}
     
    		if ((niveau == 2) && (sel.getGenre().equals("type"))) {
    			DefaultMutableTreeNode noeud = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    			noeud.add(new DefaultMutableTreeNode(sel.getTexte()));
    			return true;
    		}
     
    		return false;
     
    	}
     
    	@Override
    	public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
     
    		if (!(comp instanceof JList))
    			return false;
     
    		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;
     
    	}
     
    	/*
    	 * DRAG
    	 */
    	@Override
    	public int getSourceActions(JComponent c) {
    		return TransferHandler.COPY;
    	}
     
    	@Override
    	protected Transferable createTransferable(JComponent c) {
     
    		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().equals("lis_sites")) {
    			genre = "site";
    			retour = true;
    		}
     
    		if (la_liste.getName().equals("lis_types")) {
    			genre = "type";
    			retour = true;
    		}
     
    		if (!retour)
    			return null;
     
    		texte = (String) la_liste.getSelectedValue();
    		return new SelectionTransferable(genre, texte);
     
    	}
     
    }
    SelectionTransferable.java
    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
    package GUI.DnD_what_is_exported_from_jlist;
     
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.io.IOException;
     
    public class SelectionTransferable implements Transferable {
     
    	private String genre = null;
    	private String texte = null;
     
    	public SelectionTransferable(String genre, String texte) {
    		this.genre = genre;
    		this.texte = texte;
    	}
     
    	@Override
    	public DataFlavor[] getTransferDataFlavors() {
     
    		DataFlavor[] result = new DataFlavor[1];
     
    		result[0] = SelectionTransferableFactory.getSelTransFlavor();
    		// result[1] = DataFlavor.stringFlavor;
    		return result;
    	}
     
    	@Override
    	public boolean isDataFlavorSupported(DataFlavor flavor) {
     
    		return SelectionTransferableFactory.getSelTransFlavor().equals(flavor);
     
    	}
     
    	@Override
    	public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
     
    		if (SelectionTransferableFactory.getSelTransFlavor().equals(flavor)) {
    			return this;
    		}
     
    		throw new UnsupportedFlavorException(flavor);
    	}
     
    	public String getGenre() {
    		return genre;
    	}
     
    	public void setGenre(String genre) {
    		this.genre = genre;
    	}
     
    	public String getTexte() {
    		return texte;
    	}
     
    	public void setTexte(String texte) {
    		this.texte = texte;
    	}
     
    }
    et enfin
    SelectionTransferableFactory.java
    (peu important, la classe est destinée à fournir le type de DataFlavor associé au SelectionTransferable)
    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
    package GUI.DnD_what_is_exported_from_jlist;
     
    /*
     * This file is distributed according to the GNU Lesser Public Licence.
     * Created on 5 avr. 2005
     *
     */
     
    import java.awt.datatransfer.DataFlavor;
     
    /**
     * Contient une constante DataFlavor pour les personnes. Celle-ci aurait pu
     * aussi être rangée dans PersonneTransferable.
     * 
     * @author Serge Rosmorduc
     */
    public class SelectionTransferableFactory {
    	private static String mimeType = DataFlavor.javaJVMLocalObjectMimeType + ";class="
    			+ SelectionTransferable.class.getName();
     
    	private static DataFlavor selTransFlavor = null;
     
    	public static DataFlavor getSelTransFlavor() {
    		// Try to create a DataFlavor for color.
    		try {
    			selTransFlavor = new DataFlavor(mimeType);
    		} catch (ClassNotFoundException e) {
    		}
    		return selTransFlavor;
    	}
    }
    merci
    olivier.
    Images attachées Images attachées  

Discussions similaires

  1. Drag and Drop entre JTree
    Par bellemlih dans le forum Composants
    Réponses: 1
    Dernier message: 08/04/2008, 18h10
  2. [Drag and Drop] enlever éléments Jlist
    Par skyangel dans le forum Composants
    Réponses: 1
    Dernier message: 12/03/2008, 15h58
  3. Drag and Drop entre JList et JTree
    Par bellemlih dans le forum Composants
    Réponses: 7
    Dernier message: 25/02/2008, 12h14
  4. Drag and Drop entre 2 JTree
    Par Lebas dans le forum Composants
    Réponses: 1
    Dernier message: 07/02/2007, 11h59
  5. Drag and Drop depuis une JList
    Par vic dans le forum Composants
    Réponses: 1
    Dernier message: 25/09/2006, 01h22

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