Wenn ich ein Fenster vergrößere, indem ich entweder die Maximierungstaste oder die Vollbild-Taste auf OS X drücke, werden Mausbewegungsereignisse nicht mehr erfasst (obwohl das Ziehen ist).
Ich habe unten ein Demo-Programm eingefügt, das das Problem hervorhebt. Das Maximierungsproblem kann mithilfe des MouseEventDemo-Web-Start-Beispiels auf Java Tutorials .
Nach einiger Fehlersuche habe ich festgestellt, dass Mausbewegungen wieder aufgenommen werden, wenn die Maus das Fenster verlässt (z. B. zum Anfang des Fensters bewegt wird, um auf die Menüleiste zuzugreifen) und dann zurückkehrt. Es scheint, dass das Problem etwas mit der Beziehung zwischen der Mausposition und dem Fenster während der Größenanpassung von Animationen zu tun hat, da sich die Maus nicht vor der Größenänderung im Rahmen befindet, sondern danach ist, obwohl sie sich nicht notwendigerweise bewegt hat.
%Vor%Wenn Sie den obigen Code ausführen, wird angezeigt, wenn das Label aktualisiert wird.
Ich verwende OS X Version 10.9 Build 13A3017 mit Java SE 7 [1.7.0_45].
Oracle reagierte auf den Fehlerbericht , den ich eingereicht habe, und merkte in seinen Kommentaren an, dass das Problem bestehen sollte in Java 8 gelöst werden. Der obige Code funktioniert wie erwartet auf der 1.8.0 JRE (Build 1.8.0-b132) mit OS X 10.9.2.
Empirisch verschwindet das Problem, wenn man maximal maximiert von und zurück zur Anwendung wechselt. Hinzufügen eines ComponentListener
, das den Frame toFront()
erzwingt, scheint zu funktionieren. Nebenbei sollten Swing-GUI-Objekte auf only konstruiert und manipuliert werden Ereignisversand-Thread .
Wie getestet:
%Vor%Die Ereignisse mouseReleased, mouseClicked werden nicht ausgelöst, wenn jdk 1.6.0_65 (yosemite) verwendet wird, für jdk 1.8.0_25 (yosemite) werden die Ereignisse ausgelöst und auch Ereignisse auf jdk 1.6 (maverick) ausgelöst. Was könnte das Problem sein?
Java -Version Java Version "1.6.0_65" Java (TM) SE Laufzeitumgebung (Build 1.6.0_65-b14-466.1-11M4716) Java HotSpot (TM) 64-Bit Server-VM (Build 20.65-b04-466.1, gemischter Modus)
windowActivated Fenster geöffnet Maus gedrückt windowClosing windowDeactivated
Java-Version "1.8.0_25" Java (TM) SE Laufzeitumgebung (Build 1.8.0_25-b17) Java HotSpot (TM) 64-Bit-Server-VM (Build 25.25-b02, gemischter Modus)
windowActivated Fenster geöffnet Maus gedrückt Mausfreigegeben Mausklick windowClosing windowDeactivated
import java.awt. ; Importieren Sie java.awt.event. ;
Öffentliche Klasse TestMouseEventsOnYosemite {
%Vor%}