Drag & Drop in Swing (createTransferable)

Status
Nicht offen für weitere Antworten.

mitzy

Neues Mitglied
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.

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!
 
G

Guest

Gast
Alternativ jagst du dein Objekt vorher durch einen Serialisierer dann kannst du das Drag n Drop mit Strings nutzen und deserialisierst es nacher wieder:

Code:
public class Serializer {
	public static String serializeToString (ImgTxt objectToWrite)throws IOException, ClassNotFoundException {

		ByteArrayOutputStream out = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream( out );
		oos.writeObject( objectToWrite );
		oos.close();
		out.close();
		
		// String ausgeben
		String output = Base64.encodeBytes( out.toByteArray() );

		return output;
	}

	public static ImgTxt deserializeFromString (String serializedObject)throws IOException, ClassNotFoundException {

		byte[] pick = Base64.decode(serializedObject);
		InputStream in = new ByteArrayInputStream(pick);
		ObjectInputStream ois = new ObjectInputStream(in);
		ImgTxt deserializedObject = (ImgTxt) ois.readObject();
		ois.close();
		in.close();

		return deserializedObject;
	} 
}
 

kmt

Mitglied
hmm ich habe die erste Version, also die mit
Code:
 protected Transferable createTransferable(JComponent c) {
            String test = "test";
            System.out.println("createTransferable mit Inhalt: "+test);            
            return new StringSelection(nutzlast);
         }
auch ausprobiert, aber beim Klicken auf einen JButton bleibt -vermutlich der Windowmanager- stehen und es wird auf irgendetwas gewartet.. (die Maus l"asst sich noch bewegen, aber alle Fenster reagieren nicht auf Mause oder Tastatur).

Erst wenn ich die Applikation kille, reagieren die Fenster wieder.

woran kann das liegen?

gru"ss, kmt
 

kmt

Mitglied
hmm geht doch.. vergesst bitte mein post von eben..

Aber wie kann man das bein Verschieben angezeigte Bild ändern? Ich würde da gern ein Image anzeigen. Geht das?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Drag & Drop - kriegt Swing diese Aufgabe hin? AWT, Swing, JavaFX & SWT 5
S verhindern von drag-n-drop von swing componenten AWT, Swing, JavaFX & SWT 2
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
AmsananKING ListView Drag And Drop AWT, Swing, JavaFX & SWT 0
AmsananKING Drag And Drop Filenames Inside A Listview AWT, Swing, JavaFX & SWT 1
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
M Polygon per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 26
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
F Drag&Drop mit Transparenter Farbe bei PNG AWT, Swing, JavaFX & SWT 0
D JavaFX Pane per Drag&Drop bewegen? AWT, Swing, JavaFX & SWT 2
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Drag and Drop von eigenen Objekten AWT, Swing, JavaFX & SWT 3
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
F Drag und Drop AWT, Swing, JavaFX & SWT 0
L JavaFX JavaFX Chart Drag and Drop AWT, Swing, JavaFX & SWT 3
D JavaFX Drag&Drop mehrerer TreeViews oder TableViews AWT, Swing, JavaFX & SWT 1
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
U Drag and Drop mit imageview AWT, Swing, JavaFX & SWT 0
U Drag and Drop imageviews AWT, Swing, JavaFX & SWT 8
D SteelSeries in Netbeans als Drag-and-Drop einbinden AWT, Swing, JavaFX & SWT 0
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
S Swing Suche Drag & Drop Beispiele AWT, Swing, JavaFX & SWT 1
A Drag and Drop mit JAVAFX- Scenebuilder AWT, Swing, JavaFX & SWT 1
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
R Drag and Drop Problem auf Jpanel AWT, Swing, JavaFX & SWT 2
N Swing JTable und Drag und Drop AWT, Swing, JavaFX & SWT 2
A Drag and Drop eigener Objekte AWT, Swing, JavaFX & SWT 7
C Drag and Drop (inventar) AWT, Swing, JavaFX & SWT 15
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
Iron Monkey Nach Drag & Drop die Datei auf Komponent darstellen AWT, Swing, JavaFX & SWT 2
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
HaukeG Swing Drag & Drop in verschiedenen Varianten AWT, Swing, JavaFX & SWT 4
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
C Swing Simulation von Drag and Drop Events AWT, Swing, JavaFX & SWT 3
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
R Drag 'n Drop AWT, Swing, JavaFX & SWT 3
S Selektion bei Drag&Drop AWT, Swing, JavaFX & SWT 4
C Swing Drag and Drop mit Objekten in einem Fenster. AWT, Swing, JavaFX & SWT 9
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
F Drag & Drop durch Verbindungslinien AWT, Swing, JavaFX & SWT 10
T Swing Drag and Drop - JLabels tauschen statt überschreiben AWT, Swing, JavaFX & SWT 11
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
B Drag and Drop AWT, Swing, JavaFX & SWT 6
K Drag and Drop Workbench AWT, Swing, JavaFX & SWT 2
P SWT Eclipse Draw2D Drag and Drop (ruckelt) AWT, Swing, JavaFX & SWT 4
F SWT Drag and Drop im TreeViewer AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13
A TransferHandler & Drag n' Drop AWT, Swing, JavaFX & SWT 2
R Drag an Drop JTable Zelle AWT, Swing, JavaFX & SWT 6
D Drag & Drop - node.isRoot AWT, Swing, JavaFX & SWT 3
E Swing Drag n Drop Verschieben von Labels o.ä. AWT, Swing, JavaFX & SWT 10
E Swing Beim Drag & Drop, Drag verbieten?! AWT, Swing, JavaFX & SWT 2
E JTree Autoscroll bei Drag and Drop AWT, Swing, JavaFX & SWT 4
F Swing Problem mit Drag&Drop in JTable AWT, Swing, JavaFX & SWT 4
C keine weiteren Events während Drag&Drop Operation möglich? AWT, Swing, JavaFX & SWT 5
E Drag&Drop zwischen 2 Listen AWT, Swing, JavaFX & SWT 5
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
C Drag and Drop JPanel auf JPanel nach drop erneut verschieben? AWT, Swing, JavaFX & SWT 3
M Swing JTable Drag'n'Drop von Dateien AWT, Swing, JavaFX & SWT 3
M Drag and Drop: Quellfenster AWT, Swing, JavaFX & SWT 2
M Buttons per Drag & Drop im GridBagLayout verschieben AWT, Swing, JavaFX & SWT 6
M Swing JList > Drag & Drop AWT, Swing, JavaFX & SWT 2
C Drag an Drop vom JTree zur JTable AWT, Swing, JavaFX & SWT 4
Z Drag and Drop auf Application AWT, Swing, JavaFX & SWT 3
G Drag and Drop JTree to Canvas AWT, Swing, JavaFX & SWT 7
H Drag&Drop von JComponents AWT, Swing, JavaFX & SWT 6
G JTable drag and drop AWT, Swing, JavaFX & SWT 4
H Drag&Drop mit GWT AWT, Swing, JavaFX & SWT 8
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
A Swing Drag and Drop TreeNode User Object AWT, Swing, JavaFX & SWT 3
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
K Swing Wie ändere ich die default action für Drag&Drop AWT, Swing, JavaFX & SWT 6
R JLayeredPane - Drag&Drop - mouseDragged AWT, Swing, JavaFX & SWT 6
C JTable mit RowSorter und Drag & Drop: Zeile verschieben AWT, Swing, JavaFX & SWT 4
V SWT TreeViewer Drag'n'Drop LocalSelectionTransfer AWT, Swing, JavaFX & SWT 10
R Swing JLayeredPane - Drag&Drop Positionen vertauschen AWT, Swing, JavaFX & SWT 3
F Drag & Drop mit eigenen Komponenten AWT, Swing, JavaFX & SWT 2
B SWT - Drag & Drop innerhalb einer Table AWT, Swing, JavaFX & SWT 3
S Drag'n'Drop AWT, Swing, JavaFX & SWT 8
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
T Drag Quelle beim Drop AWT, Swing, JavaFX & SWT 6
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
E Drag & Drop von jTree in JList AWT, Swing, JavaFX & SWT 5
P Dateien per Drag&Drop ins Java-Fenster ziehen AWT, Swing, JavaFX & SWT 8
G JTree Node ggf. aufklappen bei Drag & Drop? AWT, Swing, JavaFX & SWT 7
J Drag'n Drop imm selben Frame unterbinden AWT, Swing, JavaFX & SWT 3
S Table Row per Drag and Drop in andere Table schieben? AWT, Swing, JavaFX & SWT 14
X wiedermal Drag n Drop AWT, Swing, JavaFX & SWT 2
P Drag & Drop AWT, Swing, JavaFX & SWT 2
X Drag and Drop AWT, Swing, JavaFX & SWT 2
F Drag&Drop Jlist -> JList AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben