Bonjour, je suis débutante en Drag and Drop j'ai donc pris un tutaorial et essayer d'appliqué sur mon application mais visiblement y a un truc que je ne fais pas ou pas bien ...
je veux drag and dropé un JPanel
j'ai commencé par le drag qui ne semble pas marcher :
j'ai fait un transferable
un 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 import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; public class ViewPaneTransferable implements Transferable{ private GeneralViewPanel _pane; private DataFlavor _paneFlavor; DataFlavor[] _flavors; ViewPaneTransferable(GeneralViewPanel pane) { _pane = pane; try { String MIME = DataFlavor.javaJVMLocalObjectMimeType + ";class="+ _pane.getClass().getName(); _paneFlavor = new DataFlavor(MIME); _flavors = new DataFlavor[2]; _flavors[0] =_paneFlavor; _flavors[1] = DataFlavor.stringFlavor; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException{ if ( _paneFlavor.equals(flavor)) return _pane; else return "Not Here !"; } public DataFlavor[] getTransferDataFlavors() { return _flavors; } public boolean isDataFlavorSupported(DataFlavor flavor) { // TODO Auto-generated method stub for (int i = 0; i< _flavors.length; i++) { if (_flavors[i].equals(flavor)) return true; } return false; } }
et un listener sur mon panel (tout en bas)
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 import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import javax.swing.JComponent; import javax.swing.TransferHandler; public class ViewPaneTransferHandler extends TransferHandler{ private static final long serialVersionUID = 46L; protected Transferable createTransferable(JComponent c) { System.out.println("creation transferable !"); GeneralViewPanel pane = (GeneralViewPanel)c; return new ViewPaneTransferable(pane); } public int getSourceActions(JComponent c) { System.out.println("bouh ?"); return COPY_OR_MOVE; } }
visiblement la méthode createTransferable n'est jamais appelée .. elle devrais l'être non ? (j'essaye de comprendre comment marche la dnd ... enfin voila si vous voyez ce qui cloche ...
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 import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.TransferHandler; public class GeneralViewPanel extends JPanel{ JButton _viewState; HeaderPan _header; Container _parent; boolean _open; GeneralViewPanel _me; JPanel _ToolPan; JLabel _title; int _height; private static final long serialVersionUID = 29L; GeneralViewPanel(JPanel ToolPan, Container parent) { super(); _parent = parent; _open = true; _me = this; _height = 400; _title = new JLabel("toto"); _ToolPan = ToolPan; this.setLayout(null); _viewState = new JButton("-"); this.add(_viewState); _viewState.addActionListener(new ViewListener()); _header = new HeaderPan(); this.add(_header); this.add(ToolPan); //this.setSize(parent.getWidth(), 200); } public void setHeight(int newHeight) { if (newHeight>150) _height = newHeight; else _height = 150; this.repaint(); } class ViewListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (_open) { _open = false; _viewState.setText("+"); _me.setSize(_parent.getWidth(), 25); } else { _open = true; _viewState.setText("-"); _me.setSize(_parent.getWidth(), _height); } } } public void paintComponent(Graphics g) { super.paintComponent(g); if (_open) this.setSize(_parent.getWidth(), _height); else this.setSize(_parent.getWidth(), 25); _ToolPan.setBounds(0, 25, this.getWidth(), this.getHeight()-25); _viewState.setBounds(this.getWidth()-51,2,50,20); _header.setBounds(0, 0, this.getWidth()-52, 25); } private class HeaderPan extends JPanel { private static final long serialVersionUID = 30L; HeaderPan() { super(); this.setBackground(new Color(154,192,205)); this.add(_title); this.addMouseListener(new DragAndDropPane()); this.setTransferHandler(new ViewPaneTransferHandler()); } public class DragAndDropPane extends MouseAdapter { public void mousePressed(MouseEvent e) { System.out.println("bouh"); ((HeaderPan)e.getSource()).getTransferHandler().exportAsDrag(_me, e, TransferHandler.COPY); System.out.println( ((HeaderPan)e.getSource()).getTransferHandler()); e.consume(); } } } }
Partager