salut

je tente via un drag and drop sur un jtree d'insérer une valeur en dessous d'une node

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
112
113
114
115
116
117
118
119
120
121
122
123
124
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DropMode;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.TransferHandler;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import testglob.MyTransferHandler;
 
 
public class TreeDragDemo extends JFrame {
 
    JTree tree;
 
    public TreeDragDemo() {
        setTitle("Drag'n Drop avec un JLabel !");
        setSize(400, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        JPanel pan = new JPanel();
        pan.setLayout(new GridLayout(1, 1));
        pan.setBackground(Color.white);
 
        JLabel srcLib = new JLabel("Source de drag : ", JLabel.RIGHT);
        JLabel src = new JLabel("Noeud 1");
 
        //------------------------------------------------------
        //On utilise notre nouvel objet MyTransferHandle 
        src.setTransferHandler(new MyTransferHandler());
        src.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                JComponent lab = (JComponent) e.getSource();
                TransferHandler handle = lab.getTransferHandler();
                handle.exportAsDrag(lab, e, TransferHandler.MOVE);
            }
        });
        //------------------------------------------------------
 
        JLabel destLib = new JLabel("Destination de drag : ", JLabel.RIGHT);
        JTextField dest = new JTextField();
 
        dest.setDragEnabled(true);
        tree = new JTree(getModel());
        tree.setDragEnabled(true);
        tree.setTransferHandler(new TreeTransferHandler(tree));
 
        pan.add(src);
 
        pan.add(new JScrollPane(tree));
 
        //Pour le choix des actions
        JComboBox combo = new JComboBox();
        combo.addItem("USE_SELECTION");
        combo.addItem("ON");
        combo.addItem("INSERT");
        combo.addItem("ON_OR_INSERT");
 
        combo.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent event) {
                String value = event.getItem().toString();
 
                if (value.equals("USE_SELECTION")) {
                    tree.setDropMode(DropMode.USE_SELECTION);
                }
 
                if (value.equals("ON")) {
                    tree.setDropMode(DropMode.ON);
                }
 
                if (value.equals("INSERT")) {
                    tree.setDropMode(DropMode.INSERT);
                }
 
                if (value.equals("ON_OR_INSERT")) {
                    tree.setDropMode(DropMode.ON_OR_INSERT);
                }
 
            }
        });
 
        add(pan, BorderLayout.CENTER);
        add(combo, BorderLayout.SOUTH);
        setVisible(true);
    }
 
    private TreeModel getModel() {
 
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("SDZ");
 
        DefaultMutableTreeNode forum = new DefaultMutableTreeNode("Forum");
        forum.add(new DefaultMutableTreeNode("C++"));
        forum.add(new DefaultMutableTreeNode("Java"));
        forum.add(new DefaultMutableTreeNode("PHP"));
 
        DefaultMutableTreeNode tuto = new DefaultMutableTreeNode("Tutorial");
        tuto.add(new DefaultMutableTreeNode("Tutorial"));
        tuto.add(new DefaultMutableTreeNode("Programmation"));
        tuto.add(new DefaultMutableTreeNode("Mapping"));
 
        root.add(tuto);
        root.add(forum);
 
        return new DefaultTreeModel(root);
    }
 
    public static void main(String[] args) {
        new TreeDragDemo();
    }
}
le mode a prendre est le DropMode.ON_OR_INSERT

il semble impossible d'insérer le texte sous: PHP ou bien Mapping, il est alors mis au niveau du root.

une idée?