Drag and Drop



  • Hi Folks !!
    Ich bin mit java noch nicht ganz warm, also vergebt mir. 😉

    Ich habe folgende Klasse:

    class TreeCtrl extends JPanel implements TreeSelectionListener, DropTargetListener
    {
        /**
         * Comment for <code>serialVersionUID</code>
         */
        private static final long serialVersionUID = -6891280935660804622L;
        private JTree theTree;
        private Object TreeSel;
        private DefaultMutableTreeNode rootNode;   
    
        public TreeCtrl( String root )
        {        
            // Create Panel
            super();
    
            // Create Root Node
            rootNode = new DefaultMutableTreeNode(root);
    
            // Create Tree and Set Root
            theTree = new JTree(rootNode);
    
            // Add the Tree to our Panel
            super.add(theTree);
    
            // Listen
            theTree.addTreeSelectionListener(this);
    
            theTree.setDragEnabled(true);
            theTree.setDropTarget(new DropTarget(theTree, this));
        }
            public void drop(DropTargetDropEvent dtde)
        {        
            InputStream is        = null;
            DataFlavor   data     = null;              
    
            try
            {                        
    
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }                
            dtde.dropComplete(false);
        }
    

    Das problem ist:
    Wie komme ich an die Daten die ich vom User per Drag'n Drop von einer anderen Komponente erhalte?? Und wie teste ich ob es sich bei den Daten um Daten von einer anderen TreeCtrl-Klasse handelt oder von etwas anderes ?? ich bin grad ein bisschen verloren. :(.
    Thx and rya.
    Scorcher24



  • www.cul.de/data/java2pr.pdf

    Schau dir das mal an, vielleicht bringt es was.



  • public final void dragEnter(DropTargetDragEvent e) {
    
            if (e.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                e.acceptDrag(DnDConstants.ACTION_LINK);
            } else {
                e.rejectDrag();
            }
        }
    
        public final void dragExit(DropTargetEvent e) {
    
        }
    
        public final void dragOver(DropTargetDragEvent e) {
    
            if (e.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                e.acceptDrag(DnDConstants.ACTION_LINK);
            } else {
                e.rejectDrag();
            }
        }
    
        public final void drop(DropTargetDropEvent e) {
    
            if (e.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                e.acceptDrop(DnDConstants.ACTION_LINK);
                try {
                    Object data = e.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
                    if (data instanceof java.util.List) {
                        source.setText(((File)((java.util.List)data).get(0)).getAbsolutePath());
                        e.dropComplete(true);
                    } else {
                        System.out.println(data.getClass().getName());
                        e.dropComplete(true);
                    }
                } catch (Throwable t) {
                    t.printStackTrace();
                    e.dropComplete(false);
                }
            } else {
                e.rejectDrop();
            }
        }
    
        public final void dropActionChanged(DropTargetDragEvent e) {
    
        }
    

    Also mal ein Bisschen aus meinem Programm, das DnD-fähig ist.
    Für mich gab es da ja gleich was passendes um Dateien verarbeiten zu können (DataFlavor.javaFileListFlavor). Ich weiß nicht, was du da brauchst, du kannst dir ja mal die Klasse DataFlavor angucken, vielleicht findet sich da was.

    Wie man nun an die Daten kommt, sollte ja aus dem Code ersichtlich werden.

    Ich weiß nicht ob mein Code nun perfekt ist, aber auf jeden Fall funktioniert er und damit bin ich voll and ganz zufrieden. 😃



  • Sorry für meine späte Antwort, ich hab die E-Mail übersehen!!!!

    Danke für eure Antworten. Hat mir sehr geholfen. Ich muss momentan innerhalb von ein paar Tagen mit Java warm werden, hab vorher aber C++ programmiert. 😉

    Tja die Chefs, die stellen sich alles so leicht vor. 😃

    rya.
    Scorcher24


Anmelden zum Antworten