Як встановити JFrame так, щоб він виглядав по центру, незалежно від роздільної здатності монітора? [зачинено]


197

Працюючи з Java, мені важко розташувати головне вікно в центрі екрану під час запуску програми.

Чи я можу це зробити? Це не повинно бути вертикально по центру, більш важливою метою для мене є горизонтальне вирівнювання. Але вертикальне вирівнювання також вітається.

Відповіді:


233

Я завжди робив це таким чином:

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

де thisбере участь JFrame.


1
Я знаю, що ця відповідь справді стара, але чи можливий спосіб зробити це в статичному контексті? Я вирішую між тим, щоб працювати над цим або просто відкинути публічний статичний недійсний основний (String [] аргументи), який я з будь-якої причини хотів використати.
2xedo

14
Це буде працювати в одній настройці монітора, але з подвійними моніторами це може здатися перемиканням обох (якщо вважати, що вони однакової роздільної здатності). Використання setLocationRelativeTo(null)буде централізувати його на первинному моніторі навіть у налаштуваннях на декілька моніторів.
Рангі Кін

1
Майте на увазі, що ви повинні встановити JFrame видимим перед тим, як його відцентрувати.
Мисливець S

4
@HunterS: це неправильно. Насправді, рекомендується не встановлювати його видимим, поки ПІСЛЯ не відцентруєте його. Таким чином він не з’явиться, а потім стрибає. Поки ви запакували кадр або встановили розміри перед кодом у цій відповіді, вам буде добре.
Ерік Робертсон

521

Використовуйте setLocationRelativeTo(null)

Цей метод має особливий ефект, коли ви передаєте його null. За словами Javadoc:

Якщо компонент є нульовим, або GraphicsConfiguration, пов'язаний з цим компонентом, є нульовим, вікно розміщується в центрі екрана.

Це слід зробити після встановлення розміру або виклику pack(), але перед тим, як встановити його видимим, приблизно так:

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

102
+1, якщо використовується метод pack (), setLocationRelativeToслід використовувати після виклику методу pack ()
Ravindra Gullapalli

6
@Imray, тому що, ймовірно, він не працює з подвійною конфігурацією монітора. : P
Ankit

17
Схоже, цей метод слід застосувати після .setSize().
Каміль

6
Це працює в налаштуваннях з декількома моніторами, і, як зазначено в коментарях, його потрібно викликати після pack () та setSize (), якщо вони взагалі викликаються.
Пол Грегуар

2
@Ankit прекрасно працює з моїм налаштуванням подвійного монітора. "Кращу" відповідь завжди обирає ОП.
Кент

59

Ви можете зателефонувати JFrame.setLocationRelativeTo(null)до центру вікна. Обов’язково поставте це ранішеJFrame.setVisible(true)


20
+1, якщо використовується метод pack (), setLocationRelativeToслід використовувати після виклику методу pack ()
Ravindra Gullapalli

29

Просто натисніть на форму і перейдіть до властивостей JFrame, а потім на вкладку Код і перевірте Generate Center.

введіть тут опис зображення


я ніколи про це не думав. У всякому разі, як щодо коду, який працює за собою після того, як ми натиснули це ....? @HenkVanBoeijen
gumuruh

11

Так просто, як це ...

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

або якщо ви використовуєте кадр, тоді встановіть його

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

Для уточнення з документа :

Якщо компонент є нульовим, або GraphicsConfiguration, пов'язаний з цим компонентом, є нульовим, вікно розміщується в центрі екрана.


7

я використовую NetBeans IDE 7.2.1 як середовище мого розробника, і там у вас є можливість налаштувати властивості JForm.

у властивостях JForm перейдіть на вкладку «Код» та налаштуйте «Створити центр». спочатку потрібно встановити політику розміру форми на "Створити розмір коду".


6

Я використовую NetBeans IDE 7.3, і ось як я займаюся централізацією свого JFrame. Переконайтеся, що ви натискаєте на панель JFrame та переходите на панель властивостей JFrame, клацніть на панелі коду та виберіть прапорець Створити центр.


2

Якщо ви використовуєте NetBeans, просто натисніть на кадр на дизайнерському перегляді, а потім на вкладку коду на його властивості. Далі поставте прапорець "Створити центр". Це дозволить виконати роботу.


1

Якщо ви явно, setPreferredSize(new Dimension(X, Y));тоді краще використовувати:

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


1

Ви можете скористатися цим методом, який дозволяє центрирувати JFrame одночасно та на весь екран.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);

0

В Net GUI Beans - перейти до JFrame ( права кнопка миші на JFrame в навігаторі) властивості, в відповідно з кодом , формою політикою розміру майна виберіть Сформувати код зміни розміру . У цьому ж вікні виберіть пункт Скасувати створення позиції та позначте пункт Створити розмір та центр .

Насолоджуйтесь програмуванням. Рамана

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.