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.

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.


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);

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


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


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.


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”.


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.


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ę.


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);


1

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

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.