Jak ustawić JFrame, aby był wyśrodkowany, niezależnie od rozdzielczości monitora? [Zamknięte]

197

Podczas pracy z Javą trudno mi ustawić moje główne okno na środku ekranu po uruchomieniu aplikacji.

Czy jest jakiś sposób, żeby to zrobić? Nie musi być wyśrodkowany w pionie, wyrównanie w poziomie jest dla mnie ważniejszym celem. Ale mile widziane jest również wyrównanie pionowe.

AmateurProgrammer
źródło

Odpowiedzi:

232

Zawsze robiłem to w ten sposób:

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

gdzie thiszaangażowana jest JFrame.

Jacek
źródło
1
Wiem, że ta odpowiedź jest naprawdę stara, ale czy można to zrobić w kontekście statycznym? Decyduję między pracą nad tym, a po prostu upuszczeniem publicznej statycznej pustki głównej (Argumenty String []), z której z jakiegokolwiek powodu chciałem skorzystać.
2xedo
14
Będzie to działać w konfiguracji z jednym monitorem, ale w przypadku podwójnych monitorów może się wydawać, że są one rozłożone na dwa (przy założeniu, że mają tę samą rozdzielczość). Użycie setLocationRelativeTo(null)spowoduje wyśrodkowanie go na głównym monitorze, nawet w konfiguracji z wieloma monitorami.
Rangi Keen,
1
Pamiętaj, że musisz ustawić JFrame jako widoczny PRZED wyśrodkowaniem.
Hunter S,
4
@HunterS: to jest niepoprawne. W rzeczywistości zaleca się, aby nie ustawiać go jako widocznego, dopóki PO NIE wyśrodkujesz go. W ten sposób nie pojawi się, a następnie przeskoczy. Tak długo, jak spakujesz ramkę lub ustawisz wymiary przed kodem w tej odpowiedzi, nic ci nie będzie.
Erick Robertson
520

Posługiwać się setLocationRelativeTo(null)

Ta metoda ma specjalny efekt, gdy ją zdasz null. Według Javadoc:

Jeśli komponent ma wartość NULL lub konfiguracja grafiki powiązana z tym komponentem ma wartość NULL, okno zostanie umieszczone na środku ekranu.

Należy to zrobić po ustawieniu rozmiaru lub wywołaniu pack(), ale przed ustawieniem go jako widocznego:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JRL
źródło
102
+1, jeśli użyto metody pack (), setLocationRelativeTonależy jej użyć po wywołaniu metody pack ()
Ravindra Gullapalli
6
@Imray, ponieważ prawdopodobnie nie działa z konfiguracją podwójnego monitora. : P
Ankit
17
Wygląda na to, że należy wywołać tę metodę .setSize().
Kamil
6
Działa to w konfiguracji z wieloma monitorami i jak stwierdzono w komentarzach, należy je wywołać po pack () i setSize (), jeśli są w ogóle wywoływane.
Paul Gregoire,
2
@Ankit działa idealnie z moją konfiguracją podwójnego monitora. „Najlepsza” odpowiedź jest zawsze wybierana przez PO.
Kent
59

Możesz zadzwonić, JFrame.setLocationRelativeTo(null)aby wyśrodkować okno. Postaw to wcześniejJFrame.setVisible(true)

Greg
źródło
20
+1, jeśli użyto metody pack (), setLocationRelativeTonależy użyć po wywołaniu metody pack ()
Ravindra Gullapalli
29

Wystarczy kliknąć formularz i przejść do właściwości JFrame, następnie do karty Kod i sprawdzić Generate Center.

wprowadź opis zdjęcia tutaj

علاء علام
źródło
nigdy o tym nie myślałem. W każdym razie, co powiesz na kod, który działa sam po kliknięciu tego ....? @HenkVanBoeijen
gumuruh
11

Tak proste jak to ...

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

lub jeśli używasz ramki, ustaw ją na

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

Dla wyjaśnienia z dokumentów :

Jeśli komponent ma wartość NULL lub konfiguracja grafiki powiązana z tym komponentem ma wartość NULL, okno zostanie umieszczone na środku ekranu.

Vogel612
źródło
7

Używam NetBeans IDE 7.2.1 jako środowiska programistycznego i tam możesz skonfigurować właściwości JForm.

we właściwościach JForm przejdź do zakładki „Kod” i skonfiguruj „Generuj centrum”. najpierw musisz ustawić Politykę rozmiaru formularza na „Generuj kod zmiany rozmiaru”.

Asaf Magen
źródło
6

Używam NetBeans IDE 7.3 i w ten sposób zamierzam scentralizować moją JFrame. Upewnij się, że kliknąłeś na panel JFrame i idziesz do paska właściwości JFrame, kliknij pasek kodu i zaznacz pole wyboru Generuj centrum.

Gstuntz
źródło
2

Jeśli korzystasz z NetBeans, po prostu kliknij ramkę w widoku projektu, a następnie kartę kodu w jej właściwościach. Następnie zaznacz „Generuj centrum”. To załatwi sprawę.

Kingsley Ijike
źródło
1

Jeśli tak setPreferredSize(new Dimension(X, Y));, lepiej użyć:

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


źródło
1

Możesz użyć tej metody, która pozwala na wyśrodkowanie JFrame i jednoczesny pełny ekran.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
Appsolit
źródło
0

W interfejsie graficznym Net Beans - przejdź do właściwości jframe ( kliknij prawym przyciskiem myszy na jFrame w Navigatorze), pod kodem , właściwość zasady rozmiaru formularza wybierz Wygeneruj kod zmiany rozmiaru . W tym samym oknie Odznacz Generuj pozycję i zaznacz Generuj rozmiar i środek .

Miłego programowania. Ramana

KV Ramana
źródło