Drag and Drop JTree to Canvas

Status
Nicht offen für weitere Antworten.

gerdgerdgerd

Aktives Mitglied
Hallo zusammen,

ich möchte von einem JTree per Drag and Drop die Informationen auf einen Canvas ziehen. Wenn ich nun die Informationen versuche über das Transferable Objekt zu bekommen, bekomme ich NULL Werte zurück.

Bsp.: Ein Gülter TreePath als String ausgegeben:
[root, meinknoten, meinsubknoten]

So bekomme ich es über das Transferable Objekt zurück:
[null, null, null]

D.h. es ist ein gültiges TreePath Objekt über das Transferable Objekt angekommen, nur mit NULL werten. TreePath implementiert Serializable.

ich bin folgendermaße vorgegangen:

Code:
public class MyTree extends JTree implements ActionListener, MouseListener, DragGestureListener { ...
public MyTree() {
		super();

		dragSource = DragSource.getDefaultDragSource();
		dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);

...

@Override
	public void dragGestureRecognized(DragGestureEvent event) {
		TreePath selectionPath = getSelectionPath();
		TransferableEntry transferable = new TransferableEntry(selectionPath);
				dragSource.startDrag(event, DragSource.DefaultCopyDrop, transferable, dragSourceListener);
			}
		}
	}

Der Drag Source Listener:

Code:
static class JTreeDragSourceListerner implements DragSourceListener {
		@Override
		public void dragDropEnd(DragSourceDropEvent arg0) {
		}

		@Override
		public void dragEnter(DragSourceDragEvent arg0) {
		}

		@Override
		public void dragExit(DragSourceEvent arg0) {
		}

		@Override
		public void dragOver(DragSourceDragEvent arg0) {
		}

		@Override
		public void dropActionChanged(DragSourceDragEvent arg0) {
		}
	}

und hier meine Transferable Klasse:

Code:
public class TransferableEntry implements Transferable {
	
	private TreePath treePath;
	public static final DataFlavor TREE_PATH_FLAVOR = new DataFlavor(TreePath.class, "Tree Path");

	private DataFlavor flavors[] = { TREE_PATH_FLAVOR };

	public TransferableEntry(TreePath path) {
		treePath = path;
	}

	@Override
	public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
		if (isDataFlavorSupported(flavor)) {
			return (Object)treePath;
		} else {
			throw new UnsupportedFlavorException(flavor);
		}
	}

	@Override
	public DataFlavor[] getTransferDataFlavors() {
		return flavors;
	}

	@Override
	public boolean isDataFlavorSupported(DataFlavor flavor) {
		return flavor.getRepresentationClass() == TreePath.class;
	}
}

ich rufe folgendermaße die Daten im Canvas auf:

Code:
myCanvas.setDropTarget(new DropTarget(glCanvas, new DropTargetListener() {
			@Override
			public void dragEnter(DropTargetDragEvent event) {
				event.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
			}

			@Override
			public void dragExit(DropTargetEvent arg0) {
			}

			@Override
			public void dragOver(DropTargetDragEvent event) {
			}

			@Override
			public void drop(DropTargetDropEvent event) {
				Transferable transferable = event.getTransferable();
				try {
					if (event.isDataFlavorSupported(TransferableEntry.TREE_PATH_FLAVOR)) {
						event.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
						
						Object transferData = transferable.getTransferData(TransferableEntry.TREE_PATH_FLAVOR);
						if (transferData instanceof TreePath) {
							
							TreePath selectionPath = (TreePath) transferData;
							System.out.println(selectionPath);
							...
						}
						event.getDropTargetContext().dropComplete(true);
					} else {
						event.rejectDrop();
					}
				} catch (UnsupportedFlavorException e) {
					e.printStackTrace();
					event.rejectDrop();
				} catch (IOException e) {
					e.printStackTrace();
					event.rejectDrop();
				}
			}

			@Override
			public void dropActionChanged(DropTargetDragEvent arg0) {
			}
		}));


Viele Dank
GerdGerdGerd
 

André Uhres

Top Contributor
ich möchte von einem JTree per Drag and Drop die Informationen auf einen Canvas ziehen...

Bsp.: Ein gültiger TreePath als String ausgegeben:
[root, meinknoten, meinsubknoten]

So bekomme ich es über das Transferable Objekt zurück:
[null, null, null]
Der Fehler liegt imho nicht in dem Code, den du uns zeigst. Mach mal ein kurzes, selbständiges und kompilierbares Beispiel.
 

gerdgerdgerd

Aktives Mitglied
Ich habe das Drag and Drop auf den Canvas erfolgreich nachgebaut und die Daten kommen richtig an. Nur in meinem richtigen Programm scheint es nicht zu funktionieren :bahnhof: !
Ich habe den meisten Quellcode direkt kopiert, ohne irgendwelche anpassen vorgenommen zu haben. Der einzigste Unterschied ist der Canvas. Innerhalb des Programmes nutze ich einen javax.media.opengl.GLCanvas (Jogl).

public class GLCanvas extends Canvas

Edit:
Am GLCanvas liegt es auch nicht. Im Testprogramm funktioniert ein Canvas sowie ein GLCanvas.
Kann es ein Zusammenhang mit OSGI geben?
 
Zuletzt bearbeitet:

gerdgerdgerd

Aktives Mitglied
Also es geht auch nicht mit einem JPanel im Hauptprogramm:

Es muss aber mit dem DataFlavor zu tun haben:


public static final DataFlavor TREE_PATH_FLAVOR = new DataFlavor(TreePath.class, "Tree Path");

public static final DataFlavor TREE_PATH_FLAVOR = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType, "Tree Path");
 

gerdgerdgerd

Aktives Mitglied
Ich habe herrausgefunden wenn ich diesen DataFlavor im Hauptprogramm nutze, dann kommen die gewünschten Informationen an:

public static final DataFlavor TREE_PATH_FLAVOR = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType, "Tree Path");

Nebeneffekt, dann kracht es hier, wenn ich den DefaultMutableTreeNode holen will:

Java:
Object transferData = transferable.getTransferData(TransferableEntry.TREE_PATH_FLAVOR);
   if (transferData instanceof TreePath) {
      TreePath selectionPath = (TreePath) transferData;
      DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) selectionPath.getLastPathComponent();

Code:
javax.swing.tree.TreePath cannot be cast to javax.swing.tree.DefaultMutableTreeNode

Dieser Exception ist klar und verständlich, jedoch müsst eigentlich bei getLastPathComponent ein Object zurück gegeben werden:

Returns the last component of this path. For a path returned by DefaultTreeModel this will return an instance of TreeNode.

Also im gesamten Funktioniert es nicht wie ich gedacht habe :) .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
F Swing Drag and Drop in JTree aus verschiedenen Listen AWT, Swing, JavaFX & SWT 6
E JTree Autoscroll bei Drag and Drop AWT, Swing, JavaFX & SWT 4
C Drag an Drop vom JTree zur JTable AWT, Swing, JavaFX & SWT 4
E Drag & Drop von jTree in JList AWT, Swing, JavaFX & SWT 5
G JTree Node ggf. aufklappen bei Drag & Drop? AWT, Swing, JavaFX & SWT 7
F JTree - Drag and Drop AWT, Swing, JavaFX & SWT 2
D Drag and Drop von JTree auf JPanel AWT, Swing, JavaFX & SWT 9
D JTree Drag and Drop / drop - Probleme AWT, Swing, JavaFX & SWT 4
G Drag&Drop (JTree) 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
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
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
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
Z Drag and Drop auf Application AWT, Swing, JavaFX & SWT 3
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
M Drag & Drop in Swing (createTransferable) AWT, Swing, JavaFX & SWT 6
T Drag Quelle beim Drop AWT, Swing, JavaFX & SWT 6
A Drag & Drop von Zeilen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 2
P Dateien per Drag&Drop ins Java-Fenster ziehen AWT, Swing, JavaFX & SWT 8
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

Ähnliche Java Themen

Neue Themen


Oben