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.

AmateurProgrammer
quelle

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?

Jack
quelle
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);
JRL
quelle
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
59

Sie können anrufen, JFrame.setLocationRelativeTo(null)um das Fenster zu zentrieren. Stellen Sie sicher, dass Sie dies vorher setzenJFrame.setVisible(true)

Greg
quelle
20
+1 wenn pack () Methode verwendet wird, setLocationRelativeTosollte nach pack () Methodenaufruf verwendet werden
Ravindra Gullapalli
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

علاء علام
quelle
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.

Vogel612
quelle
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.

Asaf Magen
quelle
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.

Gstuntz
quelle
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.

Kingsley Ijike
quelle
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);


quelle
1

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

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
Die Appsolit
quelle
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

KV Ramana
quelle