Как настроить отображение JFrame по центру независимо от разрешения монитора? [закрыто]

197

Работая с Java, мне трудно расположить главное окно в центре экрана при запуске приложения.

Есть ли способ, которым я могу это сделать? Это не должно быть вертикально центрировано, горизонтальное выравнивание - более важная цель для меня. Но вертикальное выравнивание также приветствуется.

AmateurProgrammer
источник

Ответы:

232

Я всегда делал это так:

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

где thisзадействован JFrame

разъем
источник
1
Я знаю, что этот ответ действительно старый, но есть ли способ сделать это в статическом контексте? Я решаю, работать ли над этим или просто удалить общедоступную статическую пустоту main (String [] args), которую я по какой-либо причине хотел использовать.
2xedo
14
Это будет работать при установке с одним монитором, но с двумя мониторами это может показаться между двумя (при условии, что они имеют одинаковое разрешение). Использование setLocationRelativeTo(null)центрирует его на основном мониторе даже в конфигурации с несколькими мониторами.
Ранги Кин
1
Имейте в виду, что JFrame должен быть видимым, прежде чем вы отцентрируете его.
Охотник S
4
@HunterS: это неправильно. На самом деле, рекомендуется не устанавливать его видимым, пока вы не отцентрируете его. Таким образом, он не появится, а затем прыгать вокруг. Пока вы упаковали фрейм или задали размеры перед кодом в этом ответе, у вас все будет хорошо.
Эрик Робертсон
520

использование setLocationRelativeTo(null)

Этот метод имеет особый эффект, когда вы передаете его null. Согласно Javadoc:

Если компонент имеет значение NULL или графическая конфигурация, связанная с этим компонентом, имеет значение NULL, окно размещается в центре экрана.

Это должно быть сделано после установки размера или вызова pack(), но перед установкой его видимым, как это:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JRL
источник
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)

Greg
источник
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);  

Для пояснения, из документов :

Если компонент имеет значение NULL или графическая конфигурация, связанная с этим компонентом, имеет значение NULL, окно размещается в центре экрана.

Vogel612
источник
7

Я использую среду IDE NetBeans 7.2.1 в качестве среды разработки, и у вас есть возможность настроить свойства JForm.

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

Асаф Маген
источник
6

Я использую среду IDE NetBeans 7.3, и вот как я собираюсь централизовать мой JFrame. Убедитесь, что вы щелкаете панель JFrame и переходите на панель свойств JFrame, нажимаете на панель кода и выбираете флажок «Создать центр».

Gstuntz
источник
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 Beans - перейдите к свойствам jframe ( щелкните правой кнопкой мыши на jFrame в Navigator), в разделе код , выберите свойство политики размера формы и выберите « Создать код изменения размера» . В том же окне снимите флажок «Создать позицию» и установите флажок « Создать размер и центр» .

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

К.В. Рамана
источник