ganzes Object Drag und Drop

Status
Nicht offen für weitere Antworten.

tr3bor

Mitglied
Hallo,
wie wir hier (www.java-forum.org/) schon geklärt haben kann ich jetzt eine jList mit eigenen Objekten befüllen.

Aus dieser Liste sollen jetzt Einträge per Drag n Drop in eine andere Liste kopiert werden können.

Hinterher benötige ich aus der 2. Liste einige Details zu den Einträgen.

Am Besten wäre es wenn ich die 2. Liste durchgehen könnte und mit getElementAt(x) mein Object wiederbekomme.

Ich hoffe ich habe verständlich beschrieben was ich vorhabe.


Als 2. lösungsansatz habe ich auch schon parallel nebenher ein array genau wie die 1.Liste befüllt.


Wenn ich jetzt beim Drag und Drop wüsste welcher eintrag an welche stelle der 2. Liste kopiert wird, könnte ich mein objekt im hintergrund in den array hin und her kopieren.


Danke für eure Hilfe
 

xysawq

Bekanntes Mitglied
Ich habe ganz ehrlich keine Ahnung, was du mit "Einträge per Drag n Drop in eine andere Liste kopiert werden" meinst, da das meiner Meinung nach bedeuten würde, dass du dir eine grafische Umgebung mit Mausabfragen aufbauen willst, in der du Arrays kopierst. (meiner Meinung nach totaler Unfug)

Aber ich hoffe einfach mal du meinst etwas anderes und formulierst deine Frage noch einmal verständlicher und detailierter ;).
 

tr3bor

Mitglied
also ich habe 2 Listen
in der ersten liste sind ganz viele einträge. Die einträge füge mich mit addElement(meinObjekt) hinzu.

Wenn einige dieser einträge jetzt in eine andere Liste kopiert werden möchte ich nicht nur den String wie der eintrag in der 1. Liste heißt abfangen können, sondern "meinobjekt", da dort noch andere wichtige informationen gespeichert sind.
 

Marco13

Top Contributor
In der List wird nur object.toString() angezeigt. Wenn man Draggt&Droppt sollte das eigentlich schon das "echte" Objekt sein....
 

tr3bor

Mitglied
ok gut
ich habe das "ListTransferHandler" beispiel von der Java Seite als grundgerüst genommen.

wo kann ich dann mein Objekt abfangen?

ich habe allerdings auch schon probiert einfach erst mein Objekt zu einer Liste hinzufügen und dann sofort wieder auslesen. Selbst da habe ich nur den String bekommen.
 

Marco13

Top Contributor
Bei dem Beispiel von der Seite wird die gesamte Auswahl in ein "StringSelection" gepackt (schließlich soll das ganze dann als String in eine TextArea eingefügt werden). Wenn du dort eigene Objekte transferen willst, musst du wohl eine eigene Implementierung von Transferable erstellen....
 

tr3bor

Mitglied
ahh ok ich nehme alles zurück ;)

mal nebenbei:
myob p = (myob) jListe.getModel().getElementAt(1);

was macht das "(myob)" genau?

ich kann jetzt von der 1. liste das objekt bekommen. nur nach dem drag n drop gibts das objekt nicht mehr..

aber da kann ich jetzt weiter probieren danke für eure denkanstöße
 

tr3bor

Mitglied
wie müsste ich denn eine eigene Implementierung von Transferable anstellen?

sonst hätt ich jetzt einfach alles was ich beim drag n drop bekomme direkt in ein array gespeichert und in der 2. liste nur eine Übersicht mit strings angezeigt. wäre aber schöner wenn ich das mit dem transferable machen könnte.
 

Marco13

Top Contributor
Du musst nur die drei Methoden aus "Transferable" implementieren. Bei getTransferData gibst du dein Objekt zurück. Für den DataFlavor reicht wohl erstmal irgendein einzlener (eigener) DataFlavor
 

tr3bor

Mitglied
ich weiß nicht genau wie du das meinst "die drei Methoden implementieren".

und wie soll ich meinen eigenen DataFlavor erstellen?
 

Marco13

Top Contributor
Ganz grob...
Code:
    private static DataFlavor sonstwasFlavor = new DataFlavor(Sonstwas.class, Sonstwas.class.getSimpleName());
    
    class TransferableSonstwas implements Transferable
    {
        private Sonstwas transferredObject;

        public TransferableObject(Sonstwas transferredObject)
        {
            this.transferredObject = transferredObject;
        }

        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException
        {
            if (!flavor.equals(sonstwasFlavor))
            {
                throw new UnsupportedFlavorException(flavor);
            }
            return transferredObject;
        }

        public DataFlavor[] getTransferDataFlavors()
        {
            return new DataFlavor[]{ sonstwasFlavor };
        }

        public boolean isDataFlavorSupported(DataFlavor flavor)
        {
            return flavor.equals(sonstwasFlavor);
        }
    }
 

Marco13

Top Contributor
Ein bißchen Code posten "Das hab' ich bisher" ... und eine konkretere Frage dazu als "Wie geht das?" ... wäre nicht verkehrt. Aber.... ich stimme deiner durch die Frage implizit gemachten :wink: Aussage zu: Drag&Drop und Data Transfer ist nicht sooo trivial (wie andere Sachen in Swing). Man hat unglaublich viele Möglichkeiten, und es ist schwer, genau DIE "rauszufischen", die man gerade braucht. (Einige "Vereinfachungen" (innere Klassen von TransferHandler) sind auch erst in Java 1.6 dazugekommen, und daher nur bedingt empfehlenswert).

Ich hab' mal versucht, prototypisch und als "Basis" das zu machen, was du vorhast. Das Programm erlaubt es, Objekte vom Typ "SomeClass" von einer Liste in die andere zu verschieben. Wenn die Zeile
m0.removeElement(someClass);
auskommentiert ist, werden die Referenzen kopiert, aber das ist schon eines der vielen Details, über die man sich noch Gedanken machen müßte: Sollen sie kopiert oder verschoben werden? Oder soll die "übliche" Funktionalität (Drag=Bewegen, STRG+Drag=Kopieren) vorhanden sein? Aber dazu kannst du dir mal http://java.sun.com/j2se/1.5.0/docs/guide/swing/1.4/dnd.html und http://java.sun.com/docs/books/tutorial/uiswing/dnd/intro.html durchlesen.

Code:
// By Marco13 for [url]http://www.java-forum.org/de/viewtopic.php?t=69940&postdays=0&postorder=asc&start=0[/url]
import javax.swing.*;
import java.awt.datatransfer.*;
import java.awt.dnd.*;
import java.awt.*;

class SomeClass
{
    private int value = (int)(Math.random()*100);

    public int getValue()
    {
        return value;
    }

    public String toString()
    {
        return "SomeClass "+value;
    }
}



class DragAndDropTest extends JFrame
{
    public static void main(String args[])
    {
        new DragAndDropTest();
    }

    public DragAndDropTest()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(1,2));

        final DefaultListModel m0 = new DefaultListModel();
        m0.addElement(new SomeClass());
        m0.addElement(new SomeClass());
        m0.addElement(new SomeClass());
        m0.addElement(new SomeClass());
        m0.addElement(new SomeClass());
        final JList l0 = new JList(m0);
        DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(
            l0, DnDConstants.ACTION_MOVE, new DragGestureListener()
            {
                public void dragGestureRecognized(DragGestureEvent e)
                {
                    SomeClass someClass = (SomeClass)l0.getSelectedValue();
                    Transferable transferable = new TransferableSomeClass(someClass);
                    e.startDrag(DragSource.DefaultMoveDrop, transferable);
                }
            }
        );
        getContentPane().add(l0);


        final DefaultListModel m1 = new DefaultListModel();
        final JList l1 = new JList(m1);
        getContentPane().add(l1);
        l1.setDropTarget(new DropTarget(l1, new DropTargetAdapter()
        {
            public void drop(DropTargetDropEvent dtde)
            {
                try
                {
                    SomeClass someClass = (SomeClass)dtde.getTransferable().getTransferData(someClassFlavor);
                    m0.removeElement(someClass);
                    m1.addElement(someClass);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }));


        pack();
        setVisible(true);
    }

    private static DataFlavor someClassFlavor = new DataFlavor(SomeClass.class, SomeClass.class.getSimpleName());

    class TransferableSomeClass implements Transferable
    {
        private SomeClass transferredObject;

        public TransferableSomeClass(SomeClass transferredObject)
        {
            this.transferredObject = transferredObject;
        }

        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException
        {
            if (!flavor.equals(someClassFlavor))
            {
                throw new UnsupportedFlavorException(flavor);
            }
            return transferredObject;
        }

        public DataFlavor[] getTransferDataFlavors()
        {
            return new DataFlavor[]{ someClassFlavor };
        }

        public boolean isDataFlavorSupported(DataFlavor flavor)
        {
            return flavor.equals(someClassFlavor);
        }
    }

}

Es könnte vielleicht sogar sein, dass der Aufwand mit DragGestureRecognizer und Transferable umgangen werden könnte, da du ja nicht mit Copy&Paste arbeitest, oder von/zu anderen Programmen Draggen/Droppen willst, aber ... das ist wohl jetzt erstmal egal.
 

tr3bor

Mitglied
ganz dolle danke :)

da werd ich mich jetzt erstmal durch arbeiten müssen

aber genau so meinte ich das und wie du schreibst so trivial ist's wohl wirklich nicht
 

Marco13

Top Contributor
Wenn man die "magischen 10 Zeilen" für DragSource und DropTarget kennt, ist's zumindest nichtmehr viel, aber ... wenn's dann darum geht, z.B. "SomeClass"-Objekte ODER "SomeOtherClass"-Objekte zu draggen, droppen, kopieren, verschieben, copy&pasten oder aus dem Windows-Explorer ins eigene Programm zu ziehen kann's halt schon schnell richtig kompliziert werden....
 

tr3bor

Mitglied
Danke dir nochmal

ich bin jetzt schon richtig weiter gekommen !

nur der Konstruktor funktioniert nicht, ich muss es in 2 schritten machen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
J Ganzes Bild Java Basics - Anfänger-Themen 4
V While Schleife für ganzes Applet Java Basics - Anfänger-Themen 6
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
fbn Datei als Ganzes lesen (nicht zeilenweise) Java Basics - Anfänger-Themen 8
J Matrix als ganzes von Konsole einlesen Java Basics - Anfänger-Themen 5
D Zeichnen mit Paint zerstört ganzes Fenster Java Basics - Anfänger-Themen 5
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
thobren Object[][] Java Basics - Anfänger-Themen 8
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
T Object zu Char zu String Java Basics - Anfänger-Themen 6
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T Object in Array Java Basics - Anfänger-Themen 3
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
H Object an methode Java Basics - Anfänger-Themen 4
D Object -> String Java Basics - Anfänger-Themen 6
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
S Object Initialisierung Java Basics - Anfänger-Themen 7
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
D Object oder Primitiv Java Basics - Anfänger-Themen 10
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Fehlermeldung: the method.... ist undefined for the type object Java Basics - Anfänger-Themen 6
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3
M object cast auf double Java Basics - Anfänger-Themen 2
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
D Aus Object auslesen Java Basics - Anfänger-Themen 2
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben