2009-11-23 17 views
5

Ich brauche etwas Hilfe. Ist es möglich, einen Drag & Drop ohne eine Komponente zu registrieren?
Zum Beispiel Ich klicke mit der Maustaste irgendwo auf das Fenster und halte die Maustaste gedrückt, in diesem Moment möchte ich eine DragSourceEvent programmatisch mit Java erstellen oder simulieren.Drag & Drop mit Schwung

Ist das möglich?

Update:

In Bezug auf Bobs Antwort, zumindest habe ich es, ich einen Listener für das Drag & Drop erstellen:

DragSource dragSource = new DragSource(); 
DragGestureListener listener = new DragGestureListener() { 
    public void dragGestureRecognized(DragGestureEvent event) { 
     event.startDrag (null, strSel) ; 
     ... 
    } 
} 

listener.dragGestureRecognized(new DragGestureEvent(
     new DragGestureRecognizer(dragSource, component) { 

}, DnDConstants.ACTION_COPY, new Point(0,0), events)); 

aber leider bekomme ich diese Ausnahme:

java.lang.IllegalArgumentException: Quellaktionen unter java.awt.dnd.DragSour ceContext. (DragSourceContext.java:169) bei java.awt.dnd.DragSource.createDragSourceContext (DragSource.java:454) bei java.awt.dnd.DragSource.startDrag (DragSource.java:293) bei java.awt.dnd.DragSource.startDrag (DragSource.java:403) bei java.awt.dnd.DragGestureEvent.startDrag (DragGestureEvent.java:203)

irgendwelche Vorschläge?

+1

Warum möchten Sie keine Komponente registrieren? Ja, es ist möglich, die richtige API aufzurufen, aber Sie können auch eine Komponente registrieren und sie unsichtbar machen usw. – bguiz

Antwort

1

Die Frage, die Sie gestellt: ich es nicht versucht haben, aber in der Theorie sollten Sie in der Lage sein, das Event-Objekt zu erstellen und einen Griff auf der Schaukel Ereigniswarteschlange von einem der Systemklassen erhalten. Ohne eine gültige Komponente zu haben, kann es jedoch Probleme geben, wenn Methoden versuchen, mit dem Ereignis zu arbeiten.

Was Sie wohl gemeint: Registrieren von Ereignissen für ein Standard-Fenster - Sie sollten in der Lage sein, ziehen einzurichten und Unterstützung für eine leere JPanel oder JFrame fallen, aber es wird einige Hacking nehmen. Ziehen Sie & Drop ist ein Schmerz, um mit dieser Ebene zu arbeiten, wenn nicht eingebaut - ich schlage vor, etwas wie eine unsichtbare Komponente oder etwas stattdessen zu verwenden.