[Resolvido] Centralizar JDialog aberto por outro JDialog

Pessoal meu problema é o seguinte, eu tenho uma aplicação e ao clicar no menu “Novo Torneio” eu abro um JDialog que eu centralizo dentro do próprio programa usando o setLocationRelative(frame), onde frame é o Painel da tela principal. Porém esse JDialog chama outro Jdialog e é aqui que está o problema, esse segundo JDialog eu não consigo centralizar como eu fiz com o primeiro.

Na classe principal eu uso o seguinte código para chamar o JDialog:

	[code]novoTorneio.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg) {
			NovoTorneio novoTorneio = new NovoTorneio();
			novoTorneio.setLocationRelativeTo(frame);
			novoTorneio.setVisible(true);				
		}	});[/code]

Dentro do primeiro JDialog eu uso esse código para chamar o segundo JDialog:

	[code]btnConfirm.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent arg0) {
		if (rbtnTorneioSuico.isSelected()){
			dispose();
			TorneioSuico suico = new TorneioSuico();
			suico.setLocationRelativeTo(frame);
			suico.setVisible(true);	}
			}
		});[/code]

Porém ao usar o atributo frame para tentar centralizar dentro do programa ocorre um erro.

Desde já agradeço a ajuda.

Tenta colocar assim:

setLocationRelativeTo(null);

Se não der certo poste o erro que você fala que está dando, deve ser um nullPointer por ele não ter acesso ao “frame”. Mas tente o que eu postei acima, pode por nas duas linhas que tem o setLocationRelativeTo se quiser ou só na que está dando erro, assim deve ficar no centro da tela.

[quote=FPaschoal]Tenta colocar assim:

setLocationRelativeTo(null);

Se não der certo poste o erro que você fala que está dando, deve ser um nullPointer por ele não ter acesso ao “frame”. Mas tente o que eu postei acima, pode por nas duas linhas que tem o setLocationRelativeTo se quiser ou só na que está dando erro, assim deve ficar no centro da tela.[/quote]

Então, se eu usar como null ele centraliza na tela do computador, mas eu quero que ele fique centralizado na tela do programa, o primeiro dialog funciona corretamente pois eu alinho ele com o frame da tela principal.

continuando: o código acima alinha o JDialog na tela do programa, independente se estiver maximizado ou no tamanho original, porém se eu colocar esse mesmo código na JDialog chamado pela primeira JDialog ele não aceita, e se usar null ele centraliza na tela.

Obrigado.

Qual o erro?

Na verdade não há erro, eu apenas não consigo centralizar ele dentro da tela programa, vou postar exatamente a sequência que eu chamo as janelas:

Eu tenho uma classe principal onde tem um JMenu que chama um JDialog, defino ele como modal e centralizado com base no frame da Janela principal do sistema:

novoTorneio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg) { NovoTorneio novoTorneio = new NovoTorneio(); novoTorneio.setLocationRelativeTo(frame); // Aqui eu centralizo o JDialog com base no frame da janela principal novoTorneio.setVisible(true); } });

Certo, esse primeiro Dialog que eu abro fica centralizado dentro do programa independente se estiver maximizado ou no tamanho original.
Nesse Dialog dependendo da opção escolhida eu chamo outro Dialog, e é aqui que mora o problema esse eu não consigo centralizar com base no “frame” da janela principal, eu tentei centralizar usando como base um JPanel que existe no primeiro Dialog, porém sem exito, eu só consigo centralizar ele com base na tela do computador, dai fica algo deselegante.

btnConfirm.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (rbtnTorneioSuico.isSelected()){ dispose(); // fecha o primeiro Dialog TorneioSuico suico = new TorneioSuico(); suico.setLocationRelativeTo(principal); // principal é o Panel principal do primeiro Dialog que eu chamo. suico.setVisible(true); } } });

Conforme disse acima, não ocorre erro algum, eu apenas não consigo centralizar o meu segundo Dialog dentro do programa principal.

Desde já obrigado pela força.

Ahh tá, é que vc disse no primeiro tópico que tinha um erro.

O seu segundo action, vc está chamando de dentro do primeiro Dialog né?

Essa sua variável “principal” é oq? Não entendi direito.

O que vc pode fazer é passar o frame como parâmetro na instanciação do primeiro Dialog, aí vc teria acesso a ela para usa o setLocationRelativeTo.

novoTorneio.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg) { NovoTorneio novoTorneio = new NovoTorneio(frame); // PASSA O FRAME NO CONSTRUTOR novoTorneio.setLocationRelativeTo(frame); // Aqui eu centralizo o JDialog com base no frame da janela principal novoTorneio.setVisible(true); } });

btnConfirm.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (rbtnTorneioSuico.isSelected()){ dispose(); // fecha o primeiro Dialog TorneioSuico suico = new TorneioSuico(); suico.setLocationRelativeTo(frame); // USA A REFERENCIA DO FRAME PASSADO NO CONSTRUTOR suico.setVisible(true); } } });

Se eu entendi direito, isso funcionaria. =P

[quote=felipeaps]Ahh tá, é que vc disse no primeiro tópico que tinha um erro.

O seu segundo action, vc está chamando de dentro do primeiro Dialog né?

Essa sua variável “principal” é oq? Não entendi direito.

O que vc pode fazer é passar o frame como parâmetro na instanciação do primeiro Dialog, aí vc teria acesso a ela para usa o setLocationRelativeTo[/quote]

Realmente isso resolveu o meu problema, eu não sabia que eu podia passar o frame como parâmetro através do construtor para outra classe poder usar, a variável principal é o JPanel do Dialog.

Sobre o erro que eu falei era sobre o frame, mas o seu método funcionou certinho aqui.

Obrigado a todos que ajudaram.