Java: JFrame.setLocationRelativeTo(null) nicht zentrieren das Fenster auf Ubuntu 10.04 / gnome 2.30.2 mit 1.6.0_18 OpenJDK
Beispielcode:
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setLocationRelativeTo(null);
jFrame.setSize(600, 600);
jFrame.pack();
//jFrame.setLocationRelativeTo(null); //same results
jFrame.setVisible(true);
screenshot http://img193.imageshack.us/img193/5296/screenshotrev.png
Ist dies das OpenJDK ist Schuld? Ich erinnere mich hören, es war nicht so gut wie die Sonne, aber da wurde es der standard für Ubuntu oder was auch immer habe ich beschlossen zu gehen zusammen mit ihm. Das Programm ist wahrscheinlich gonna laufen auf windows, so dass ich glaube, ich bin gonna haben, um zu überprüfen, gibt es... keine einfache Möglichkeit, dies zu beheben, in eine Plattform-unabhängige Art und Weise, ohne zu brechen, wo es schon funktioniert?
In Sie screenshot, oben Links ist perfekt zentriert. Sie müssen nur kompensiert werden durch die Höhe und Breite des Rahmens.
Wie bereits von Evan, dieser code ruft setLocationRelativeTo() zu früh in den code. Es muss getan werden nach pack()/setSize(). Beachten Sie auch, dass in Ihrem Beispiel, und Evan, der Aufruf von setSize() ist redundant, wenn unmittelbar gefolgt von pack().
Wie bereits von Evan, dieser code ruft setLocationRelativeTo() zu früh in den code. Es muss getan werden nach pack()/setSize(). Beachten Sie auch, dass in Ihrem Beispiel, und Evan, der Aufruf von setSize() ist redundant, wenn unmittelbar gefolgt von pack().
InformationsquelleAutor captain poop | 2010-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein Weg ist, um manuell die position des Fensters. Fügen Sie den folgenden code direkt nach dem Aufruf
pack()
.Disclaimer, dieser wurde nur unter windows getestet.
Außerdem sollten Sie immer
setPreferredSize()
stattsetSize()
.erhalten Sie die gleichen Ergebnisse wie in deiner Frage?
yep :((
versuchen Sie es ohne Teilung getWidth und getHeight durch 2. Also:
new Point(middle.x - (jFrame.getWidth()), middle.y - (jFrame.getHeight()));
dasselbe passiert ist. Es ist komisch, weil ich kann die location ganz normal, aber keiner dieser Methoden klappte. Gut, ich merke, dass das problem im jFrame getWidth() und getHeight(). Breite 10, Höhe 30, obwohl ich eingestellt habe das jframe Größe bis 600 x 600.
InformationsquelleAutor jjnguy
Dieser wird das problem beheben und Zentrum der Jframe
InformationsquelleAutor Evan
Dies tatsächlich funktioniert besser, da pack können ändern Sie die frame-Größe, während
validate
lässt die frame-Größe allein.InformationsquelleAutor Nicholas Duchon
Nur eine Präzision : Wenn Sie den Speicherort, bevor Sie die Größe des Rahmens, werden Sie Zentrum der oberen linken Ecke des Fensters, weil der Größe ist (0,0). Sie haben die Größe vor Ort.
Funktioniert es auch bei mir mit OpenJDK-6 und Ubuntu 13.04.
Versuchen Sie es auf anderen Plattformen.
Danke. Ja, natürlich, ich werde mein edit beantworten. (Sorry für mein Englisch, ich bin ein französische student in computer science).
InformationsquelleAutor YoannFleuryDev
Ich weiß, das ist eine alte Frage, aber setLocationRelativeTo() funktioniert auch, aber es muss aufgerufen werden, nachdem pack(). Rahmen getWidth() und getHeight() zurück, andere (die richtige) Werte nach der Verpackung und das ist, warum OP nicht in der Lage ist zum Zentrum.
InformationsquelleAutor mrazjava
Sollten Sie nicht erklären, die jFrame-Größe, bevor er die relative Lage. Wenn Sie das tun, was passiert ist, dass wird ziehen Sie Ihre iFrame Weg aus der gegebenen Lage.
Dies ist falsch----
Ist dies richtig----
JFrame
nachsetLocationRelativeTo
...InformationsquelleAutor LahiruBandara
Nur die Größe vor Einstellung der Lage.
Falsch:
Richtig:
Hinweis: Rufen Sie setVisible-Methode() zuletzt um zu verhindern, "springen" des Fensters.
InformationsquelleAutor trinity420