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
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;
	}
}
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
 
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;	
	}
}
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
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();
			}
		}
	}
}
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 ...