Wie kann ich festlegen, dass JFrame unabhängig von der Monitorauflösung zentriert angezeigt wird? [geschlossen]


197

Während der Arbeit mit Java fällt es mir schwer, mein Hauptfenster beim Starten der Anwendung in der Mitte des Bildschirms zu positionieren.

Kann ich das auf irgendeine Weise tun? Es muss nicht vertikal zentriert sein, die horizontale Ausrichtung ist für mich das wichtigere Ziel. Eine vertikale Ausrichtung ist aber auch willkommen.

Antworten:


232

Ich habe es immer so gemacht:

Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation(dim.width/2-this.getSize().width/2, dim.height/2-this.getSize().height/2);

Wo thisist der JFrame beteiligt?


1
Ich weiß, dass diese Antwort wirklich alt ist, aber gibt es eine Möglichkeit, dies in einem statischen Kontext zu tun? Ich entscheide mich, darauf hinzuarbeiten oder einfach die öffentliche statische Leerstelle (String [] args) zu löschen, die ich aus irgendeinem Grund verwenden wollte.
2xedo

14
Dies funktioniert in einem einzelnen Monitor-Setup, aber bei zwei Monitoren kann es so aussehen, als ob sie sich über beide erstrecken (vorausgesetzt, sie haben dieselbe Auflösung). Bei Verwendung setLocationRelativeTo(null)wird es auch in einem Multi-Monitor-Setup auf dem primären Monitor zentriert.
Rangi Keen

1
Denken Sie daran, dass Sie den JFrame sichtbar machen müssen, bevor Sie ihn zentrieren.
Hunter S

4
@ HunterS: Das ist falsch. In der Tat wird empfohlen, es erst sichtbar zu machen, nachdem Sie es zentriert haben. Auf diese Weise wird es nicht angezeigt und springt dann herum. Solange Sie den Rahmen gepackt oder die Abmessungen vor dem Code in dieser Antwort festgelegt haben, ist alles in Ordnung.
Erick Robertson

520

Verwenden setLocationRelativeTo(null)

Diese Methode hat einen besonderen Effekt, wenn Sie a übergeben null. Nach Angaben des Javadoc:

Wenn die Komponente null ist oder die dieser Komponente zugeordnete GraphicsConfiguration null ist, wird das Fenster in der Mitte des Bildschirms platziert.

Dies sollte nach dem Einstellen der Größe oder dem Aufrufen erfolgen pack(), aber bevor Sie es sichtbar machen, wie folgt:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

102
+1 wenn pack () Methode verwendet wird, setLocationRelativeTosollte nach pack () Methode Aufruf verwendet werden
Ravindra Gullapalli

6
@Imray, weil es wahrscheinlich nicht mit Dual-Monitor-Konfiguration funktioniert. : P
Ankit

17
Es sieht so aus, als ob diese Methode aufgerufen werden sollte .setSize().
Kamil

6
Dies funktioniert in einem Multi-Monitor-Setup und muss, wie in den Kommentaren angegeben, nach pack () und setSize () aufgerufen werden, wenn sie überhaupt aufgerufen werden.
Paul Gregoire

2
@Ankit es funktioniert perfekt mit meinem Dual-Monitor-Setup. Die "beste" Antwort wird immer vom OP gewählt.
Kent


29

Klicken Sie einfach auf das Formular und gehen Sie zu den JFrame-Eigenschaften, dann zur Registerkarte Code und überprüfen Sie Generate Center.

Geben Sie hier die Bildbeschreibung ein


Ich habe nie darüber nachgedacht. Wie wäre es mit dem Code, der hinter sich selbst funktioniert, nachdem wir darauf geklickt haben? @ HenkVanBoeijen
Gumuruh

11

So einfach ist das ...

setSize(220, 400);
setLocationRelativeTo(null);  

oder wenn Sie einen Rahmen verwenden, stellen Sie den Rahmen auf ein

frame.setSize(220, 400);
frame.setLocationRelativeTo(null);  

Zur Verdeutlichung aus den Dokumenten :

Wenn die Komponente null ist oder die dieser Komponente zugeordnete GraphicsConfiguration null ist, wird das Fenster in der Mitte des Bildschirms platziert.


7

Ich verwende NetBeans IDE 7.2.1 als meine Entwicklerumgebung und dort haben Sie die Möglichkeit, die JForm-Eigenschaften zu konfigurieren.

Gehen Sie in den JForm-Eigenschaften zur Registerkarte "Code" und konfigurieren Sie das "Generate Center". Sie müssen zuerst die Formulargrößenrichtlinie auf "Generate Resize Code" einstellen.


6

Ich verwende NetBeans IDE 7.3. So zentralisiere ich meinen JFrame. Stellen Sie sicher, dass Sie auf das JFrame-Bedienfeld klicken und zu Ihrer JFrame-Eigenschaftsleiste wechseln, auf die Codeleiste klicken und das Kontrollkästchen Center generieren aktivieren.


2

Wenn Sie NetBeans verwenden, klicken Sie einfach auf den Rahmen in der Entwurfsansicht und dann auf die Registerkarte Code in den Eigenschaften. Aktivieren Sie als Nächstes "Generate Center". Damit ist die Arbeit erledigt.


1

Wenn Sie explizit setPreferredSize(new Dimension(X, Y));dann ist es besser zu verwenden:

setLocation(dim.width/2-this.getPreferredSize().width/2, dim.height/2-this.getPreferredSize().height/2);


1

Sie können diese Methode verwenden, mit der der JFrame gleichzeitig zentriert und im Vollbildmodus angezeigt werden kann.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

0

Gehen Sie in der GUI von Net Beans zu den Eigenschaften von jframe ( klicken Sie im Navigator mit der rechten Maustaste auf jFrame ). Wählen Sie unter Code und Richtlinieneigenschaft für Formulargröße die Option Code zum Ändern der Größe aus . Im gleichen Fenster, generieren entmarkieren Position und Zecke generiert Größe und Zentrum .

Viel Spaß beim Programmieren. Ramana

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.