JTable und Drag&Drop

MuhMau

Grünschnabel
Also ich will folgendes tuen:
Ich habe eine Ansammlung von JLables, die bestimmte Icons haben.
Diese Icons will ich per Drag&Drop in die Einzelnen Zellen einer JTable packen.
Mein Ansatz:
Das JLable das als DragSource Dient.
Code:
public class TokenLabel extends JLabel{

    
public TokenLabel(Color color){
    super(new TokenIcon(color));
    TransferHandler handler=new Source("icon");
    this.setTransferHandler(handler);
}

private class Source extends TransferHandler{
   public boolean importData(JComponent comp,Transferable t){
       return true;
   }
   public Source(String propterty){
       super(propterty);
   }
}
}

Mein MouseAdapter der den Drag registriert:
Code:
 private class DragMouseAdapter extends MouseAdapter {
        public void mousePressed(MouseEvent e) {
            JComponent c = (JComponent)e.getSource();
            TransferHandler handler = c.getTransferHandler();
            handler.exportAsDrag(c, e, TransferHandler.COPY);
        }
    }

So, nachdem ich diesen MouseAdapter auf die instancen von meinen JLabels gepackt habe, funktionieren diese ausgezeichnet, aber das Problem ist es Diese nun in das JTable zu bekommen.
Hie Mein Ansatz der sich eigentlich durch unverständniss auszeichnet ^^
Code:
public class TokenHole extends JLabel implements TableCellRenderer{
    
    /** Creates a new instance of TokenHole */
    public TokenHole() {
            super(new TokenIcon(java.awt.Color.BLACK));
            this.setTransferHandler(new DropIconTransferHandler());
            this.addMouseListener(new DropMouseAdapter());
    }
final Clipboard clipboard =Toolkit.getDefaultToolkit().getSystemClipboard();

 private class DropMouseAdapter extends MouseAdapter{
  public void mouseReleased(MouseEvent e) {
        TokenHole component= (TokenHole)e.getSource();
        Transferable clipData = clipboard.getContents(clipboard);
        if (clipData != null) {
        TransferHandler handler =component.getTransferHandler();
        handler.importData(component,clipData);
      }
  }
 }
public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {    
            // Since the renderer is a component, return itself
            return this;
        }    
  
}
mit
Code:
public class DropIconTransferHandler extends TransferHandler{
    String mimeType = DataFlavor.javaJVMLocalObjectMimeType +";class=javax.swing.Icon";
    DataFlavor iconFlavor;
    /** Creates a new instance of DropIconTransferHandler */
    public DropIconTransferHandler() {
        try {
            iconFlavor = new DataFlavor(mimeType);
        } catch (ClassNotFoundException e) { }        
    }
    public boolean importData(JLabel c, Transferable t) {
        if (hasIconFlavor(t.getTransferDataFlavors())) {
            try {
                Icon col = (Icon)t.getTransferData(iconFlavor);
                c.setIcon(col);
                return true;
            } catch (UnsupportedFlavorException ufe) {
            } catch (IOException ioe) { }
        }
        return false;
    }
    
    
    protected boolean hasIconFlavor(DataFlavor[] flavors) {
        if (iconFlavor == null) {
             return false;
        }

        for (int i = 0; i < flavors.length; i++) {
            if (iconFlavor.equals(flavors[i])) {
                return true;
            }
        }
        return false;
    }    
}
Es passiert aber nichts, bzw die Cellen bleiben als Ziel ungültig.
 
Ich hab es mitlerweile hinbekommen, dass meine JLables als empfänger dienen, aber ich bekomm es nicht hin, dass es innnerhalb des JTable funktioniert...n tip?
 
Zurück