setSize() funktioniert nicht für JFrame
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
class Demo
{
JFrame jf;
Demo()
{
jf=new JFrame("Demo");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(5000,5000);
jf.setVisible(true);
System.out.println(jf.getSize());
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new Demo();
}
});
}
}
Benutze ich jf.setSize(5000, 5000)
für JFrame, aber nach, dass getSize gibt andere Größe: java.awt.Dimension[width=1386,height=788]
(meine Bildschirmauflösung ist 1366 x 768 Pixel) Kann ich einstellen, Bildgröße größer als der Bildschirm Größe? wahrscheinlich ein solches Verhalten ist mit einigen frame-Eigenschaften, aber ich weiß nicht, über Sie.
- Was ist das beabsichtigte Verhalten der Fenster größer als der Bildschirm?
- erzürnt die end-user, glaube ich...
- Dieser code funktioniert auf meinem Linux-Rechner
- Vielleicht ein OS-Ding? Auf vista, ein frame/Fenster können nicht (viel? weiß nicht, es sind ein paar Pixel mehr) größer als der monitor-Größe, bekomme ich [width=1702,Höhe=1072]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit setPreferredSize statt setSize. Funktioniert in meinem Fall (Ubuntu 12.04+GNOME 3).
Die javadoc sagt:
Dies umfasst das Verhalten, das Sie beobachten /beschweren.
Es ist nicht kristallklar, aber ein Grund, dass
Window.setSize(...)
hat dieses Verhalten ist, dass window-Manager (außerhalb von Java), in der Regel ein veto-Anwendung versucht, dies zu tun. Vermutlich, weil es offen für Missbrauch und "nicht, was der Nutzer will". Trotzdem, es ist letztlich nicht Ihre Anwendung, rufen Sie das überschreiben der Fenster-manager-Einschränkungen.Nur für Freitag spass (das ist nichts, was Sie sollten in Erwägung ziehen, in Produktionsumgebung 🙂 - spielen ein bisschen weiter mit @jinguy code, bemerkte ich, dass die größer-als-das-Leben-Größe verwendet wurde, nach dem minimieren des Rahmens. Dabei programmgesteuert lassen es so erscheinen, als monster von Anfang an
Ich probierte ein paar Kombinationen von calls und das folgende scheint zu funktionieren:
Es noch druckt mit einer anderen Größe, aber das Fenster erscheint weit größer, als es druckt.
jf.setResizable(false);
.Diese sind meine Beobachtungen (1.6 verwendet, jetzt bin ich mit 1.7 auch unter XP):
Können Sie schmucklos Rahmen von "fast" jeder Größe-ich benutze eine Bildschirmauflösung von 1280 x 1024 Pixel (gedreht) und habe nicht bemerkt irgendwelche Probleme mit frame-1500x1500, obwohl einige frames 2000x2000 Blick nicht erledigt (aber in Arbeit) und Rahmen von 4000x4000 zeigt seinen Daumen in der Taskleiste, aber dieser Daumen ist unactive und der Rahmen selbst erscheint nicht. Ich denke, die größte mögliche Größe der stramme JFrame ist abhängig von system-Funktionen, die abhängig von der Grafik-hardware.
Verziert mit frames es ist eine einfache Geschichte -- Sie können ein wenig größer als der Bildschirm Größe (von wenigen Pixeln in der Regel).
In meiner Anwendung mit Größe bestimmt, während der Laufzeit (z.B. Spiele, wo Sie Ihre board-Größe dynamisch) verwende ich den folgenden Ansatz:
1). vor dem Verpacken legen die frame-Position auf null. Sie stellt die Obere linke Ecke des JFrame in der Mitte des Bildschirms (vor pack das JFrame ist (0,0) dimensioniert)
2). festlegen der bevorzugten Größen meiner frame-Inhalt (ich benutze immer einzelne JPanel) und erinnern Sie
3). pack den Rahmen
4). wenn die frame-Größen nach pack nicht denen entsprechen, die vor dem pack entsorgen Sie den Rahmen, die Inhalte entfernen, die das JPanel, JScrollPane hinzufügen mit diesem JPanel und legen Sie die bevorzugten Größen der JScrollPane als JPanel bevorzugten Größen PLUS die JScrollBar Feste Dimensionen (d.h. die Breite der vertikalen scrollbar und eine Höhe von der horizontalen).
5). pack wieder-dies garantiert nur die notwendigen Bildlaufleisten angezeigt werden (sofern Sie nicht zur Erhöhung der JFrame Größen, dann werden beide scrollbars immer angezeigt werden -- es ist auch eine Notwendigkeit zum entfernen der JScrollPane Standard-Grenze).
6). neue Position des Rahmens durch verschieben nach Links und nach oben durch die Hälfte der entsprechenden Größe, um es.