[Drag and Drop] qu'est ce qui ne va pas ?
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:
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:
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:
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 ...