Trabalhar com interface desktop em Java, com Swing, nos obriga a conhecer algumas particularidades para poder trabalhar de modo correto.
A biblioteca Swing oferece dois tipos de janela (alguns chamam de "Formulário" - deve ser herança do Delphi ou VB, acredito eu) que são: JFrame e JDialog. A classe JFrame tem a característica de ser a janela principal da aplicação, enquanto a JDialog é mais voltada para ser as janelas filhas do sistema, pois ele pode guardar uma referência a janela que a invocou (parent), pode ser "modal" ou não (quando uma janela é modal significa que quando ativa o usuário só consegue operar nesta janela e em mais nenhuma).
Não entrarei nos detalhes de herança ou métodos, afinal o javadoc foi criado para isso mesmo. O objetivo aqui é mostrar como centralizar as janelas no desktop ou relativamente ao componente que a invocou.
1.
Centralizando no desktop do sistema operacional:Essa método espera como parâmetro alguma classe filha de Component. No caso, JFrame e JDialog herdam dela.
public void windowCentered(Component window){
/*Capturando a resolução do desktop do sistema operacional*/
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int w = dialog.getSize().width;
int h = dialog.getSize().height;
int x = (screenSize.width-w)/2;
int y = (screenSize.height-h)/2;
dialog.setLocation(x, y);
}
2.
Centralizando um objeto Component dentro de outro:O método setLocationRelativeTo(Component c) centraliza um componente em relação a outro informado no parâmetro. Esse método pertence a classe Window e é extendida por JFrame e JDialog.
Exemplo:
/*Este JFrame é a tela principal*/
JFrame mainWindow = new JFrame();
/*Este dialog será aberto e sua posição será no centro do frame acima*/
JDialog diag = new JDialog();
diag.setLocationRelativeTo(mainWindow);