Funktioniert JFrame.setExtendedState (MAXIMIZED_BOTH) mit undekorierten Frames?

9

Der folgende Swing-Code funktioniert nicht korrekt auf meinem Computer oder auf meinen Arbeitscomputer (alle Windows XP und Java 6):

%Vor%

Es maximiert das Fenster, berücksichtigt jedoch nicht die Windows-Taskleiste (sie füllt den Bildschirm). Wenn Sie "frame.setUndercorated (true)" auskommentieren es scheint richtig zu funktionieren.

Der Javadoc scheint zu implizieren, dass dies funktionieren sollte. Ist das ein Bug in Java? Ist es auf eine bestimmte Version oder Version von Windows beschränkt? Gibt es eine Problemumgehung?

Ich habe einige Problemumgehungen gesehen, aber sie scheinen unvollständig zu sein. Ich kann nicht die erste Person sein, die meine eigenen Frame-Dekorationen in Java programmiert.

BEARBEITEN: Nachdem ich den OpenJDK heruntergeladen und den systemeigenen Code durchforstet habe, habe ich festgestellt, dass Java die win32-Funktion aufruft: SetWindowPlacement und unter bestimmten Bedingungen ändern MINMAXINFO , um die richtige Fenstergröße zu erhalten. Ich denke, was ich sah, war das Standard-Windows-Verhalten für ein Fenster ohne Titel oder Rahmen (obwohl ich das nirgends dokumentiert finden kann). Ich habe gefunden, dass das Aufrufen von JFrame.setMaximizedBounds () die Grenzen bereitstellt, die verwendet werden, um die win32-MINMAXINFO-Struktur zu ändern. Indem ich meine durchgeführte Aktion ändere und die Fenstergröße nutze, die von camickr als MaximizedBounds vorgeschlagen wurde, komme ich etwas näher:

%Vor%

Jetzt verbirgt das Maximierungsfenster nicht mehr die Menüleiste. Aber .. jetzt habe ich ein anderes Problem. Ich kann nicht von einem sekundären Monitor maximieren. Der Rahmen verschwindet einfach.

Ich füge einige Win32-Tags hinzu, um einen C ++ - Programmierer zu finden, der dieses Problem erkennt.

LÖSUNG: Ich kann meine eigene Frage anscheinend noch nicht beantworten, also werde ich hier meine Lösung vorschlagen. Ich musste eine Sun-Klasse verwenden, und ich habe es nicht auf anderen Plattformen als Windows getestet, aber bisher scheint dies mit mehreren Monitoren und mehreren Taskleistenkonfigurationen gut zu funktionieren:

%Vor%     
Bryan Young 13.09.2011, 14:32
quelle

1 Antwort

4

Interessant. Wenn ich es versuche, scheint es in zwei Schritten zu geschehen. Zuerst wird erweitert, um den Bereich über der Taskleiste zu füllen, und einen Sekundenbruchteil später wird die Taskleiste abgedeckt. Ich habe keine Ahnung warum.

Für eine Problemumgehung können Sie wie folgt vorgehen:

%Vor%

, um die Grenzen Ihres Rahmens manuell festzulegen, wenn Sie ihn maximieren möchten.

    
camickr 13.09.2011 15:04
quelle

Tags und Links