Hallo alle,
ich hab ein paar Fragen zu Drag & Drop in Swing.
Und zwar schreibe ich eine Applikation, mit der man Gepäckförderbänder modellieren und das Transportieren von Gepäckstücken darauf simulieren kann. Hier ein Screenshot der GUI: http://scriptkiddy.de/gui.png
Nun soll man aus der Seitenleiste die Bausteine auf das Raster draggen & droppen können. Bei den Componenten handelt es sich links um modifizierte JButtons und rechts um ein Array aus modifizierten JLabels.
Um meine JButtons drag-fähig zu machen, habe ich nun folgenden Code hinzugefügt, den ich anhand eines Beispiels unseres Profs gebastelt hab.
In der createTransferable Methode wird jetzt ja aber nur ein String übergeben. Vom Prof gab es noch ein weiteres Beispiel, bei dem ein eigenes Objekt übergeben wurde, und zwar folgendes:
Nun habe ich aber das Problem, dass mir Eclipse den DataHandler rot unterstreicht, weil es den folgenden Import nicht kennt:
Ich bin MacUser, habe daher nur Java 5. Ist das package javax.activation erst ab Java 6 vorhanden? Ich konnte dazu nicht wirklich was finden bei google. Nur, dass dieses Package wohl in der J2EE vorhanden ist, nicht aber in der J2SE.
Zurück zu meiner ursprünglichen Frage: die Methode createTransferable muss ja nicht zwangsläufig einen DataHandler zurückgeben, oder? Könnte ich nicht eine eigene Klasse schreiben, die Transferable implementiert und diese dann ohne DataHandler zurückgeben?
Wäre klasse, wenn mir jemand helfen könnte!
ich hab ein paar Fragen zu Drag & Drop in Swing.
Und zwar schreibe ich eine Applikation, mit der man Gepäckförderbänder modellieren und das Transportieren von Gepäckstücken darauf simulieren kann. Hier ein Screenshot der GUI: http://scriptkiddy.de/gui.png
Nun soll man aus der Seitenleiste die Bausteine auf das Raster draggen & droppen können. Bei den Componenten handelt es sich links um modifizierte JButtons und rechts um ein Array aus modifizierten JLabels.
Um meine JButtons drag-fähig zu machen, habe ich nun folgenden Code hinzugefügt, den ich anhand eines Beispiels unseres Profs gebastelt hab.
Code:
//drag and drop
//bgerade ist der modifizierte JButton, der die Gerade darstellt
bgerade.setTransferHandler(new TransferHandler() {
@Override
public int getSourceActions(JComponent c) {
return COPY;
}
@Override
protected Transferable createTransferable(JComponent c) {
String test = "test";
System.out.println("createTransferable mit Inhalt: "+test);
return new StringSelection(nutzlast);
}
});
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent me) {
JComponent c = (JComponent)me.getSource();
TransferHandler th = c.getTransferHandler();
th.exportAsDrag(c, me, TransferHandler.COPY);
}
};
bgerade.addMouseListener(ml);
//ende
In der createTransferable Methode wird jetzt ja aber nur ein String übergeben. Vom Prof gab es noch ein weiteres Beispiel, bei dem ein eigenes Objekt übergeben wurde, und zwar folgendes:
Code:
/*
* Wieder Transferobjekt bauen, diesmal mit
* eigener Klasse MeineTransferDaten (und
* die dann in DataHandler wickeln)
*/
@Override
protected Transferable createTransferable(JComponent c) {
System.out.println("imageDragLabel: createTransferable");
DataHandler dh = new DataHandler(new MeineTransferDaten(getNachricht(), getZaehler()), MeineTransferDaten.getFlavor().getMimeType());
return dh;
}
Nun habe ich aber das Problem, dass mir Eclipse den DataHandler rot unterstreicht, weil es den folgenden Import nicht kennt:
Code:
import javax.activation.DataHandler;
Ich bin MacUser, habe daher nur Java 5. Ist das package javax.activation erst ab Java 6 vorhanden? Ich konnte dazu nicht wirklich was finden bei google. Nur, dass dieses Package wohl in der J2EE vorhanden ist, nicht aber in der J2SE.
Zurück zu meiner ursprünglichen Frage: die Methode createTransferable muss ja nicht zwangsläufig einen DataHandler zurückgeben, oder? Könnte ich nicht eine eigene Klasse schreiben, die Transferable implementiert und diese dann ohne DataHandler zurückgeben?
Wäre klasse, wenn mir jemand helfen könnte!