Java beendet das Erfassen von Mausbewegungsereignissen nach dem Maximieren oder vollständigen Screenen eines Fensters in Mac OS X

8

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].

    
e4e5 18.11.2013, 16:51
quelle

4 Antworten

1

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.

    
e4e5 20.03.2014, 01:50
quelle
7

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 .

%Vor%

Wie getestet:

%Vor%     
trashgod 18.11.2013 17:43
quelle
0

Ich war in der Lage, eine Arbeit zu dem maximierten Teil dieses Problems zu finden, indem ich einen windowStateListener zu dem Rahmen hinzufüge und folgendes mache:

%Vor%

Wenn Sie dies mit der Größenanpassung von trashgod kombinieren, sollten Sie gut in Form sein.

    
Jayfray 27.05.2014 19:40
quelle
0

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%

}

    
alexandrubarbat 23.10.2014 23:27
quelle

Tags und Links