Como definir o JFrame para aparecer centralizado, independentemente da resolução do monitor? [fechadas]

197

Ao trabalhar com Java, acho difícil posicionar minha janela principal no centro da tela quando inicio o aplicativo.

Existe alguma maneira de fazer isso? Não precisa ser centralizado verticalmente, o alinhamento horizontal é o objetivo mais importante para mim. Mas o alinhamento vertical também é bem-vindo.

AmadorProgramador
fonte

Respostas:

232

Eu sempre fazia assim:

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

onde thisestá o JFrame envolvido.

Jack
fonte
1
Eu sei que essa resposta é realmente antiga, mas existe alguma maneira possível de fazer isso em um contexto estático? Estou decidindo entre trabalhar para isso ou simplesmente largar o main public void estático (String [] args) que eu, por qualquer motivo, queira usar.
2xedo
14
Isso funcionará em uma configuração de monitor único, mas com monitores duplos, pode aparecer nos dois (supondo que eles tenham a mesma resolução). O uso setLocationRelativeTo(null)o centralizará no monitor principal, mesmo em uma configuração de vários monitores.
Rangi Keen
1
Lembre-se de que você deve definir o JFrame visível antes de centralizá-lo.
Hunter S
4
@ Hunter: isso está incorreto. De fato, é recomendável não configurá-lo visível até DEPOIS de centralizá-lo. Dessa forma, ele não aparecerá e depois pulará. Contanto que você tenha embalado o quadro ou definido as dimensões antes do código nesta resposta, você ficará bem.
Erick Robertson
520

Usar setLocationRelativeTo(null)

Este método tem um efeito especial quando você o passa a null. De acordo com o Javadoc:

Se o componente for nulo ou a GraphicsConfiguration associada a esse componente for nula, a janela será colocada no centro da tela.

Isso deve ser feito após definir o tamanho ou a chamada pack(), mas antes de configurá-lo visível, assim:

frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
JRL
fonte
102
+1 se o método pack () é usado, setLocationRelativeTodeve ser utilizado após pacote chamada de método ()
Ravindra Gullapalli
6
@Irmay porque provavelmente não funciona com a configuração de dois monitores. : P
Ankit 01/03
17
Parece que esse método deve ser chamado depois .setSize().
Kamil
6
Isso funciona em uma configuração de vários monitores e, conforme declarado nos comentários, deve ser chamado de after pack () e setSize (), se forem chamados.
Paul Gregoire
2
@ Ankit funciona perfeitamente com a minha configuração de monitor duplo. A "melhor" resposta é sempre escolhida pelo OP.
21714 Kent
59

Você pode ligar JFrame.setLocationRelativeTo(null)para centralizar a janela. Certifique-se de colocar isso antesJFrame.setVisible(true)

Greg
fonte
20
+1 se o método pack () é usado, setLocationRelativeTodeve ser utilizado após pacote chamada de método ()
Ravindra Gullapalli
29

Basta clicar no formulário e acessar as propriedades do JFrame, depois na guia Código e verificar Generate Center.

insira a descrição da imagem aqui

علاء علام
fonte
Eu nunca pensei sobre isso. Enfim, que tal o código que funciona atrás de si mesmo depois que clicamos nisso ....? @HenkVanBoeijen
gumuruh 30/01
11

Tão simples como isso ...

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

ou se você estiver usando um quadro, defina-o como

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

Para esclarecimentos, nos documentos :

Se o componente for nulo ou a GraphicsConfiguration associada a esse componente for nula, a janela será colocada no centro da tela.

Vogel612
fonte
7

Estou usando o NetBeans IDE 7.2.1 como meu ambiente de desenvolvedor e você tem uma opção para configurar as propriedades do JForm.

nas propriedades do JForm, vá para a guia 'Código' e configure o 'Centro de geração'. você precisará primeiro definir a Política de tamanho do formulário como 'Gerar código de redimensionamento'.

Asaf Magen
fonte
6

Estou usando o NetBeans IDE 7.3 e é assim que eu centralizo meu JFrame. Clique no Painel JFrame e vá para a barra de propriedades do JFrame, clique na barra de código e selecione a caixa de seleção Generate Center.

Gstuntz
fonte
2

Se você usa o NetBeans, basta clicar no quadro na vista de design e, em seguida, na guia Código em suas propriedades. Em seguida, marque 'Gerar centro'. Isso fará o trabalho.

Kingsley Ijike
fonte
1

Se você explicitamente setPreferredSize(new Dimension(X, Y));, é melhor usar:

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


fonte
1

Você pode usar esse método, que permite que o JFrame seja centralizado e em tela cheia ao mesmo tempo.

yourframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
O Appsolit
fonte
0

Na GUI do Net Beans - vá para as propriedades do jframe ( clique com o botão direito do mouse em jFrame no Navigator), em código , propriedade da política de tamanho do formulário, selecione Gerar código de redimensionamento . Na mesma janela, Desmarque Gerar posição e marque Gerar tamanho e centro .

Aprecie a programação. Ramana

KV Ramana
fonte