Hallo,
folgendes Problem an dem ich nun schon Wochen sitze und einfach nicht weiterkomme.
Ich habe zwei JTrees die jeweils eine Drag and Drop Mehtode für sich besitzen. Vorallem wird aber eine Drag and Drop Methode zwischen diesen Bäumen gebraucht.
Ich habe schlichtweg keine Ahnung wie ich das verwirklichen soll... Habe bestimmt schon alle möglichen seiten über drag and drop gelesen, studiert, kopiert und bearbeitet. Aber das Problem kann ich einfach nicht lösen ;(
Meine Bäume sehen identisch aus:
die Bäume stellen einen Explorer da der die Festplatte von C:/ aus spiegelt.
Ich würde mich über Lösungen (-ansätze) sehr freuen.
Danke
Gruß N4pst3r
folgendes Problem an dem ich nun schon Wochen sitze und einfach nicht weiterkomme.
Ich habe zwei JTrees die jeweils eine Drag and Drop Mehtode für sich besitzen. Vorallem wird aber eine Drag and Drop Methode zwischen diesen Bäumen gebraucht.
Ich habe schlichtweg keine Ahnung wie ich das verwirklichen soll... Habe bestimmt schon alle möglichen seiten über drag and drop gelesen, studiert, kopiert und bearbeitet. Aber das Problem kann ich einfach nicht lösen ;(
Meine Bäume sehen identisch aus:
Java:
public class RightFileSystem extends JPanel {
final JTree tree = new JTree( createTreeModel() );
public RightFileSystem() {
tree.setDragEnabled( true );
tree.setDropMode( DropMode.USE_SELECTION );
tree.setDropTarget( new DropTarget( tree, TransferHandler.MOVE,
new DropTargetAdapter() {
public void drop( DropTargetDropEvent dtdeR ) {
// Der im Tree ausgewählte Node
TreePath tpSelektierterPfadR = tree.getSelectionPath();
TreePath tpQuellpfadR = tpSelektierterPfadR.getParentPath();
DefaultMutableTreeNode dmtAusgewählterNodeR = (DefaultMutableTreeNode) tpSelektierterPfadR.getLastPathComponent();
// Die Koordinaten des "gezogenen" Nodes und der Node, wo dieser hinein soll
Point pDropLocationR = dtdeR.getLocation();
TreePath tpZielpfadR = tree.getClosestPathForLocation(
pDropLocationR.x, pDropLocationR.y );
// Die Eltern-Knoten
DefaultMutableTreeNode dmtZielParentNodeR = (DefaultMutableTreeNode) tpZielpfadR.getLastPathComponent();
DefaultMutableTreeNode dmtQuellParentNodeR = (DefaultMutableTreeNode) tpQuellpfadR.getLastPathComponent();
// Die Verschiebung auf der Festplatte
String sAusgewählterPfadR = ((File) dmtAusgewählterNodeR.getUserObject()).getAbsolutePath();
String sZielpfadR = ((File) dmtZielParentNodeR.getUserObject()).getAbsolutePath();
File fQuelleR = new File( sAusgewählterPfadR );
File fZielR = new File( sZielpfadR );
boolean verschiebenR = fQuelleR.renameTo( new File( fZielR, fQuelleR.getName() ) );
if( !verschiebenR ) {
JOptionPane.showMessageDialog( null, "Die Datei " + fQuelleR
+ " konnte nicht nach " + fZielR + " verschoben werden.", "Error",
JOptionPane.ERROR_MESSAGE );
}
else {
// Die Verschiebung der Knoten im grafischen Baum
dmtQuellParentNodeR.remove( dmtAusgewählterNodeR );
dmtZielParentNodeR.add( dmtAusgewählterNodeR );
dtdeR.dropComplete( true );
RightFileSystem rfs = new RightFileSystem();
LeftFileSystem lfs = new LeftFileSystem();
}
tree.updateUI();
tree.validate();
}
}));
JScrollPane scrollPane = new JScrollPane( tree );
this.add( scrollPane, BorderLayout.CENTER );
this.add( GJApp.getStatusArea(), BorderLayout.SOUTH );
tree.addTreeExpansionListener( new TreeExpansionListener() {
public void treeCollapsed( TreeExpansionEvent e ) {
}
public void treeExpanded( TreeExpansionEvent e ) {
TreePath path = e.getPath();
FileNode node = (FileNode) path.getLastPathComponent();
if( !node.isExplored() ) {
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
node.explore();
model.nodeStructureChanged( node );
}
}
} );
}
private DefaultTreeModel createTreeModel() {
File root = new File( "C:/" );
FileNode rootNode = new FileNode( root );
rootNode.explore();
return new DefaultTreeModel( rootNode );
}
public static void main( String args[] ) {
RightFileSystem rFS = new RightFileSystem();
}
}
Ich würde mich über Lösungen (-ansätze) sehr freuen.
Danke
Gruß N4pst3r