Qual é a maneira mais fácil de centralizar a java.awt.Window
, como a JFrame
ou a JDialog
?
java
swing
user-interface
awt
Andrew Swan
fonte
fonte
setLocation()
,setLocationRelativeTo()
esetLocationByPlatform()
ou todos AWT, não Swing. ;)Respostas:
Deste link
fonte
pack()
e colocou o canto superior esquerdo do quadro no centro da tela. Depois de mover a linha para baixo,pack()
ela ficou devidamente centralizada.Isso deve funcionar em todas as versões do Java
fonte
setLocationRelativeTo(null)
deve ser chamado depois de usarsetSize(x,y)
ou usarpack()
.fonte
Observe que as técnicas setLocationRelativeTo (null) e Tookit.getDefaultToolkit (). GetScreenSize () funcionam apenas para o monitor principal. Se você estiver em um ambiente de vários monitores, pode ser necessário obter informações sobre o monitor específico em que a janela está antes de fazer esse tipo de cálculo.
Às vezes importante, às vezes não ...
Consulte GraphicsEnvironment javadocs para obter mais informações sobre como fazer isso.
fonte
No Linux, o código
Colocar minha janela em um local aleatório sempre que a iniciar, em um ambiente com vários monitores. E o código
"corte" a janela ao meio colocando-a exatamente no centro, que fica entre meus dois monitores. Usei o seguinte método para centralizá-lo:
Faz a janela aparecer bem no centro da primeira tela. Esta provavelmente não é a solução mais fácil.
Funciona corretamente em Linux, Windows e Mac.
fonte
Finalmente consegui que esse monte de códigos funcionasse no NetBeans usando Swing GUI Forms para centralizar o jFrame principal:
OU
OU
fonte
O seguinte não funciona para JDK 1.7.0.07:
Ele coloca o canto superior esquerdo no centro - não o mesmo que centralizar a janela. O outro também não funciona, envolvendo frame.getSize () e dimension.getSize ():
O método getSize () é herdado da classe Component e, portanto, frame.getSize retorna o tamanho da janela também. Assim, subtraindo metade das dimensões vertical e horizontal das dimensões vertical e horizontal, para encontrar as coordenadas x, y de onde colocar o canto superior esquerdo, você obtém a localização do ponto central, que acaba centralizando a janela também. No entanto, a primeira linha do código acima é útil, "Dimensão ...". Basta fazer isso para centralizá-lo:
O JLabel define o tamanho da tela. Está em FrameDemo.java disponível nos tutoriais java no site Oracle / Sun. Eu o defini para a metade da altura / largura do tamanho da tela. Em seguida, centrei-o colocando o canto superior esquerdo em 1/4 da dimensão do tamanho da tela a partir da esquerda e 1/4 da dimensão do tamanho da tela a partir do topo. Você pode usar um conceito semelhante.
fonte
abaixo está o código para exibir um quadro na parte superior central da janela existente.
}
} public static void main (String [] args) lança Exception {
}
Abaixo está a saída do snippet de código acima:
fonte
frame.setLocation(x, 0);
parece estar errado - não deveria estarframe.setLocation(x, y);
?int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
existe no código apenas para mostrar que você também pode centralizar no eixo vertical? Ok, pensei que você simplesmente esqueceu de usar, desculpe pelo problema.Há algo realmente simples que você pode estar esquecendo depois de tentar centralizar a janela usando
setLocationRelativeTo(null)
ousetLocation(x,y)
e acaba ficando um pouco fora do centro.Certifique-se de usar qualquer um desses métodos após a chamada,
pack()
porque você acabará usando as dimensões da própria janela para calcular onde colocá-la na tela. Até quepack()
seja chamado, as dimensões não são o que você pensaria, descartando assim os cálculos para centralizar a janela. Espero que isto ajude.fonte
Exemplo: Dentro de myWindow () na linha 3 está o código de que você precisa para definir a janela no centro da tela.
fonte
frame.setLocationRelativeTo (null);
Exemplo completo:
fonte
O código a seguir é centralizado
Window
no centro do monitor atual (ou seja, onde o ponteiro do mouse está localizado).fonte
Você também pode tentar isso.
fonte
Na verdade enquadra
.getHeight()
egetwidth()
não retorna valores, verifiqueSystem.out.println(frame.getHeight());
colocando diretamente os valores de largura e altura, então funcionará bem no centro. por exemplo: como abaixoambos 450 são a largura e a altura do meu quadro
fonte
fonte
A ordem das chamadas é importante:
primeiro -
segundo -
fonte