Linha da tabela ao ser clicada abre 2 JDialog ou mais

2 respostas
java
S

Bom dia, eu criei uma tabela e adiciono várias linhas. Cada linha passa os dados e exibe em um JDialog ao ser clicado no botão detalhar. Porém estou com um problema, quando clico pela primeira vez na linha e peço para detalhar as informações no JDialog (independente da posição 1ª, 2ª, 8ª e etc…) ela abre normalmente (uma vez). Quando fecho e clico em outra linha pra detalhar ela abre 2 JDialog, quando fecho e clico em outra linha, ela abre 3 JDialog e assim por diante.

Usei o método mouseClicked, tentei colocar um contador, tentei colocar o obj “Visualizador” fora de addMouseListener, tentei usar dispose e nada.

Alguem sabe a solução?

table.addMouseListener(new MouseAdapter(){
	  	public void mouseClicked(MouseEvent e){
	  		if(e.getClickCount() == 1){
	  			btnDetalhar.setEnabled(true);
				btnExcluir.setEnabled(true);

				btnDetalhar.addMouseListener(new MouseAdapter() {
					@Override
					public void mouseClicked(MouseEvent arg0) {
						if(e.getClickCount() == 1){
							Visualizador visualizador = new Visualizador();
							visualizador.setModal(true);
							visualizador.setVisible(true);
							table.clearSelection();
							//visualizador.dispose();
						}
					}
				});
	  		}
	  	}
	  });

2 Respostas

peczenyj

assim

eu ACHO que

quando vc lida com eventos, se vc adiciona um listener a cada vez que vc recebe um evento, o objeto pode responder ao mesmo evento varias vezes ( pois existem N listeners )

adicione o mouse listener no btnDetalhar apenas um vez, fera.

S

Fiz besteira, deixei assim e funcionou.

table.addMouseListener(new MouseAdapter(){
	  	public void mouseClicked(MouseEvent e){
	  		if(e.getClickCount() == 1){
	  			btnDetalhar.setEnabled(true);
				btnExcluir.setEnabled(true);
	  		}
	  	}
	  });

	btnDetalhar.addMouseListener(new MouseAdapter() {
					@Override
					public void mouseClicked(MouseEvent arg0) {
							Visualizador visualizador = new Visualizador();
							visualizador.setModal(true);
							visualizador.setVisible(true);
							table.clearSelection();
					}
				});

Pra pegar o valor da linha, usei table.getSelectedRow();
Obrigado pela ajuda @peczenyj

Criado 8 de setembro de 2016
Ultima resposta 8 de set. de 2016
Respostas 2
Participantes 2