mehrere DropTargets

Baste

Mitglied
Hi Leute,

ich habe eine Klasse für einen Drag&Drop Tree geschrieben. Quelle ist der JTree und Ziel ist eine JList (nur diese eine). Gibt es irgendwie eine Möglichkeit dem JTree mehrere Ziele zuzuordnen --> sprich ich möchte die Objekte in mehrere JLists ziehen (dabei soll aber auch nur die Liste befüllt werden, welche "angesprochen" wird). Hier mal mein Code...

Code:
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragGestureRecognizer;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.event.ActionEvent;
import java.util.Vector;

import javax.swing.DropMode;
import javax.swing.JList;
import javax.swing.JTree;
import javax.swing.tree.TreeSelectionModel;

/**
* <p>Überschrift: Drag&Drop - Tree</p>
* <p>Beschreibung: JTree mit Drag&Drop-Funktion (z.B. in eine JList)</p>
* <p>Copyright: Copyright (c) 2008</p>
* @version 1.0
*/


public class DragAndDropTree extends JTree implements DragGestureListener,
      DragSourceListener, DropTargetListener {

   /**Baum*/
   JTree tree;
   
   /**zugehörige Liste*/
   JList list;

   /**Vektor enthält Wert*/
   public Vector vecList = new Vector();
   
   /**Vector enthält Positionen der "bewegten" Elemente aus Baum*/
   public Vector treePositions = new Vector();
   
   /**Array benötigt für "treePositions"*/
   int[] singleTreePosition;

   /**Ziel*/
   DropTarget mytarget;

   /**Quelle*/
   DragSource mysource;

   DragGestureRecognizer dgr;

   /**
    *
    * @param list
    */
   public DragAndDropTree(JList list, Vector treePositions) {
      
      tree = this;
      this.list = list;
      this.treePositions = treePositions;

      // Eigenschaften des Baumes
      tree.getSelectionModel().setSelectionMode(
            TreeSelectionModel.SINGLE_TREE_SELECTION);
      tree.setDropMode(DropMode.USE_SELECTION);
      tree.setDragEnabled(true);

      setDrag_n_Drop(list);
   }

   /**
    * definiert Ziel und Quelle
    *
    * @param list
    */
   void setDrag_n_Drop(JList list) {
      // Algemeines Object
      mysource = new DragSource();

      // Ziel definiert
      mytarget = new DropTarget(list, DnDConstants.ACTION_COPY_OR_MOVE, this);

      // DragGestureRecognizer dgr
      // Definiert Drag-Source
      dgr = mysource.createDefaultDragGestureRecognizer(tree,
            DnDConstants.ACTION_COPY_OR_MOVE, this);

   }

   public void dragGestureRecognized(DragGestureEvent dge) {
      // TODO Automatisch erstellter Methoden-Stub

   }

   public void dragDropEnd(DragSourceDropEvent dsde) {
      // TODO Automatisch erstellter Methoden-Stub

   }

   public void dragEnter(DragSourceDragEvent dsde) {
      // TODO Automatisch erstellter Methoden-Stub

   }

   public void dragExit(DragSourceEvent dse) {
      // TODO Automatisch erstellter Methoden-Stub

   }

   public void dragOver(DragSourceDragEvent dsde) {
      // TODO Automatisch erstellter Methoden-Stub

   }

   public void dropActionChanged(DragSourceDragEvent dsde) {
      // TODO Automatisch erstellter Methoden-Stub

   }

   public void dragEnter(DropTargetDragEvent dtde) {
      // TODO Automatisch erstellter Methoden-Stub
      dtde.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);
   }

   public void dragExit(DropTargetEvent dte) {
      // TODO Automatisch erstellter Methoden-Stub

   }

   public void dragOver(DropTargetDragEvent dtde) {
      // TODO Automatisch erstellter Methoden-Stub

   }

   /**
    * String bearbeiten und der Liste hinzufügen
    */
   public void drop(DropTargetDropEvent dtde) {
      try {
         if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)) {
            Transferable tr = dtde.getTransferable();
            dtde.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
            String sel = (String) tr
                  .getTransferData(DataFlavor.stringFlavor);
            // Vector füllen
            vecList.addElement(sel);
            //auf Liste darstellen
            list.setListData(vecList);
            dtde.dropComplete(true);
            // Positionen speichern
             singleTreePosition = tree.getSelectionRows();
             for (int v = 0; v < singleTreePosition.length; v ++) {
                treePositions.addElement(singleTreePosition[v]);
             }
            
         } else {
            dtde.rejectDrop();
         }
      } catch (Exception ex) {
         ex.printStackTrace();
      }

   }

   public void dropActionChanged(DropTargetDragEvent dtde) {
      // TODO Automatisch erstellter Methoden-Stub

   }
}

Danke!
 
Zurück