setSize () funktioniert nicht für JFrame

8
%Vor%

Ich verwende jf.setSize(5000, 5000) für JFrame, aber danach gibt getSize andere Größe zurück: java.awt.Dimension[width=1386,height=788] (meine Bildschirmauflösung ist 1366x768) Kann ich die Bildgröße größer als die Bildschirmgröße einstellen? wahrscheinlich wird ein solches Verhalten mit einigen Rahmeneigenschaften versehen, aber ich weiß nichts über sie.

    
eXXXXXXXXXXX2 02.03.2012, 16:28
quelle

5 Antworten

10

Versuchen Sie, setPreferredSize anstelle von setSize zu verwenden. Funktioniert in meinem Fall (Ubuntu 12.04 + GNOME 3).

    
user1050755 27.03.2013, 03:14
quelle
7

Das Javadoc sagt das:

  

"Die Methode ändert die geometriebezogenen Daten. Daher ignoriert das systemeigene Fenstersystem möglicherweise solche Anforderungen oder es kann die angeforderten Daten ändern, sodass das Window-Objekt genau entsprechend platziert und skaliert wird zu den Desktop-Einstellungen. "

Dies umfasst das Verhalten, das Sie beobachten / sich beschweren.

Es ist nicht kristallklar, aber ein Grund dafür, dass Window.setSize(...) dieses Verhalten hat, ist, dass Fenstermanager (außerhalb von Java) in der Regel ein Veto gegen Anwendungsversuche unternehmen. Vermutlich liegt das daran, dass es offen ist für Missbrauch und "nicht das, was der Benutzer will". Jedenfalls ist es nicht der Aufruf Ihrer Anwendung, die Einschränkungen des Fenstermanagers zu überschreiben.

    
Stephen C 02.03.2012 16:46
quelle
4

Nur für den Freitagsspaß (also nichts, was Sie in der Produktionsumgebung in Betracht ziehen sollten :-) - mit dem @ jinguy-Code ein bisschen weiter, habe ich bemerkt, dass die Größer als die Lebensgröße verwendet wurde, nachdem der Rahmen minimiert wurde. Mach es programmgesteuert so, dass es von Anfang an als Monster erscheint.

%Vor%     
kleopatra 02.03.2012 17:01
quelle
3

Ich habe ein paar Kombinationen von Anrufen ausprobiert, und folgendes schien zu funktionieren:

%Vor%

Es druckt immer noch eine andere Größe, aber das Fenster scheint viel größer zu sein, als es druckt.

    
jjnguy 02.03.2012 16:44
quelle
1

Das sind meine Beobachtungen (benutzt 1.6, jetzt benutze ich 1.7 unter XP):

Sie können einen unverzerrten Rahmen von "fast" jeder Größe haben - ich benutze eine Bildschirmauflösung von 1280x1024 (gedreht) und habe keine Probleme mit Frame 1500x1500 bemerkt, obwohl einige Frames 2000x2000 unvollständig (aber Arbeit) und Frame von 4000x4000 aussehen zeigt seinen Daumen in der Taskleiste an, aber dieser Daumen ist inaktiv und der Rahmen selbst wird nicht angezeigt. Ich denke, die größtmögliche Größe von undekorierten JFrame hängt von den Systemfähigkeiten ab, die von der Grafikhardware abhängen.

Bei dekorierten Rahmen gibt es eine einfache Geschichte - sie können etwas größer als die Bildschirmgröße sein (im Allgemeinen um einige Pixel).

In meiner Anwendung mit der zur Laufzeit bestimmten Größe (z. B. Spiele, bei denen Sie die Boardgröße dynamisch festlegen) verwende ich den folgenden Ansatz:

1). Packen Sie vor dem Packen die Position des Frames relativ zu null. Es platziert die obere linke Ecke von JFrame in der Mitte des Bildschirms (vor dem Packen ist der JFrame (0,0) dimensioniert)

2). setze bevorzugte Größen meines Frame-Inhalts (ich benutze immer Single JPanel) und erinnere sie an

3). pack den Rahmen

4). Wenn die Framegrößen nach dem Pack nicht mit denen vor dem Pack übereinstimmen, entfernen Sie den JPanel des Contents, fügen Sie JScrollPane mit diesem JPanel hinzu und legen Sie die bevorzugten Größen von JScrollPane als bevorzugte JPanel-Größen PLUS der festen JScrollBar-Dimensionen fest (dh eine Breite der vertikalen Bildlaufleiste und eine Höhe des horizontalen).

5). packen Sie erneut - dies garantiert, dass nur die erforderlichen Bildlaufleisten angezeigt werden (wenn Sie die JFrame-Größen nicht vergrößern, werden immer beide Bildlaufleisten angezeigt - außerdem müssen Sie den JScrollPane-Standardrahmen entfernen).

6). Legen Sie die neue Position des Rahmens fest, indem Sie ihn nach links und nach oben um die Hälfte der entsprechenden Größe verschieben, um ihn zu zentrieren.

    
Tomek 02.06.2012 10:10
quelle

Tags und Links