TransferHandler

Status
Nicht offen für weitere Antworten.
M

MuhMau

Gast
Also Ich habe folgendes problem mit dem TransferHandler:
Ich habe einfache JLabels mit einem Icon.
Auf diese packe ich setTransferHandler(new javax.swing.TransferHandler("icon"));
einen TransferHandler für eben diese.
Dazu geben ich diesen einen MouseAdapter:

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);
        }
    }
Mein Ziel ist es später das Diese Icons in die Cellen einer JTable kopiert werden können.
Aber ich will nicht, dass diese Icons untereinander ihre Icons austauschen können, was sie aber im moment noch tuen.
Welche möglichkeiten gibt es dies zu unterbinden?
Zur Not würde ich bestimmte JLabels benutzen (Einmal als Source und Einmal als Ziel im JTable) und dann per instanceOf
differenzieren, aber wie würde ich dann sehen wenn losgelassen wird?....gibt es nicht die möglichkeit einfach zu sagen das Diese Lables kein gütliges Ziel sind?
 
M

MuhMau

Gast
Wäre es auch eine Lösung zwei TransferHandler zu basteln wo ich jeweils die nicht gebrauchten methoden überschreibe und einfach nichts mache?...
z.B Bei den Quell Lables:
importData(ULCComponent targetComponent, Transferable transferable){return true;}
 
M

MuhMau

Gast
Hokay, letzteres Klappt, aber wie geht die Möglichkeit, dass es erst gar nicht Dropable ist auf diesen Labels?
 
M

MuhMau

Gast
Und leider noch eine weitere Frage.
Ich muss ja für die JLables in meiner JTable einen eigenen
TransferHandler für Icons basteln,
aber stimmt das hier so ?
String mimeType = DataFlavor.javaJVMLocalObjectMimeType +";class=javax.swing.Icon";
Und ist es möglich für jede einzelne Celle ein eigenes JLabel zu haben. bis jetzt bekomm ich es über den Cell Renderer nur hin das es pro Spalte ist
 
G

Guest

Gast
Hier mein TransferHandler, bin mir nicht sicher ob er funktioniert da ich mir noch nicht mal sicher bin ob ich das mit der Table richtig mache.
Code:
public class DropIconTransferHandler extends TransferHandler{
    String mimeType = DataFlavor.javaJVMLocalObjectMimeType +";class=javax.swing.Icon";
    DataFlavor iconFlavor;
    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;
    }    
}
 
M

MuhMau

Gast
Ps. das oben war ich...
Scheint im Allgemeinen nicht zu funktionieren -.- hier mein test:
Code:
        jLabel10 = new javax.swing.JLabel();
        jLabel10.setTransferHandler(new DropIconTransferHandler());
        jLabel10.addMouseListener(new DragMouseAdapter());

 final Clipboard clipboard =Toolkit.getDefaultToolkit().getSystemClipboard();
  private class DropMouseAdapter extends MouseAdapter{
  public void mouseReleased(MouseEvent e) {
        JLabel component= (JLabel)e.getSource();
        Transferable clipData = clipboard.getContents(clipboard);
        if (clipData != null) {
        TransferHandler handler =component.getTransferHandler();
        handler.importData(component,clipData);
      }
  }

Das jLabel ist kein Ziel, bzw ich kann halt nicht drauf dropppen
 
M

MuhMau

Gast
hokay, hab es hinbekommen das die JLables als empfänger außerhalb des JTable funktionieren...aber im JTable funktioniert es nicht...
muss ich vielleicht einen auf das JTable legen und das dann irgendwie machen?...habt ihr vielleicht tips?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben