Drag&Drop

Für Java war Drag&Drop von Anfang an ein schwieriges Thema. In JDK 1.1 gab es dafür gar keine Unterstützung, in JDK 1.2 erste, kaum brauchbare Gehversuche und seit JDK 1.3 eine relativ vollständige und portable Implementierung, die allerdings bei manchen VMs für Stabilitätsprobleme sorgt. Der Grund für diese Schwierigkeiten ist zum einen in dem extrem unterschiedlichen Ansatz der verschiedenen Betriebssysteme für die Implementierung von Drag&Drop zu suchen, zum anderen in dem Anspruch, nicht nur Drag&Drop innerhalb von Java Programmen zu unterstützen, sondern auch zwischen Java und dem zugrundeliegenden System.

Die Konsequenz aus dieser Situation ist, dass Drag&Drop in Java vollständig "native" implementiert ist, d.h. auf der Ebene des Betriebssystems. Die zugehörigen Events sind für QF-Test weder auswertbar, noch können sie von QF-Test mit Java-Mitteln generiert werden. Daher kann Drag&Drop nicht direkt abgespielt werden.

Dennoch bietet QF-Test für JDK 1.3 und höher Unterstützung für Drag&Drop. Die direkte Aufnahme von Drag&Drop wird ab JDK 1.4 unterstützt. Zur Wiedergabe dienen die 'Mausevents'DRAG_FROM und DROP_TO, sowie das optionalen DRAG_OVER. Beim Abspielen setzt QF-Test den sogenannten AWT Robot ein, der es ermöglicht, "harte" Events auf Betriebssystemebene zu generieren und der erst ab JDK 1.3 zu Java gehört. Diese "harten" Events bewegen den Mauszeiger tatsächlich über den Bildschirm und lösen so die nötigen Events für eine Drag&Drop Operation aus.

Auch die Simulation von Drag&Drop bei gedrückter [Shift] oder [Strg] Taste ist möglich. Ändern Sie hierzu die 'Modifiers' Attribute der DRAG_FROM, DRAG_OVER und DRAG_TO 'Mausevents' und fügen Sie den Shift oder Strg modifier hinzu. Für Strg müssen Sie z.B. 2 zum aktuellen Wert addieren. Es ist sogar möglich, das Drücken oder Loslassen der [Shift] oder [Strg] Tasten während der Drag Operation zu simulieren, indem Sie nur die Modifier eines Teils der Events ändern.

Wie erwähnt war Drag&Drop anfangs auf manchen Systemen nicht gerade stabil. Mit älteren JDKs konnte es vorkommen, dass der Einsatz des AWT Robot zum Simulieren von Drag&Drop das SUT zum Absturz bringt, oder im Extremfall sogar das gesamte System lahm legt. Inzwischen ist die Situation deutlich besser. Durch die Einführung der Interpolation von Mausbewegungen konnte die Zuverlässigkeit der Drag&Drop Wiedergabe deutlich verbessert werden. Näheres hierzu finden Sie in Abschnitt 39.3.5.1.

Hinweis Unter Windows kann es zu allem Überfluss auch zu Konflikten mit dem Maustreiber kommen. Sollte es Probleme mit Drag&Drop geben, reduzieren Sie in den Mauseinstellungen der Systemsteuerung die Geschwindigkeit des Mauszeigers auf 50%.