Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mapb_1990

double click numa linha de uma JTable + refresh

Recommended Posts

boas,

tenho uma JTable que lista as mensagens de um user.

precivasa k ao fazer double click numa linha de uma JTable, que abri-se uma JDialog com a mensagem.

tb precisava de fazer um refresh à JHTable de x em x segundos.

 

alguem ajuda?

 

segue o metodo que cria a JTable:

 

private JPanel caixaEntrada() {
		java.text.SimpleDateFormat dtfGeral = new java.text.SimpleDateFormat("HH:mm dd-MM-yyyy");

		JPanel caixaEntrada = new JPanel(new FlowLayout());

		table1 = new JTable();
		table1.setShowGrid(false);
		table1.setSelectionBackground(new Color(0,0,255));
		table1.setAutoscrolls(true);

		Object[][] mensagens = new Object[user.getCaixaEntrada().size()][4];
		for(int i = 0; i<user.getCaixaEntrada().size(); i++) {
			mensagens[i][0] = user.getCaixaEntrada().get(i).getTo();
			mensagens[i][1] = user.getCaixaEntrada().get(i).getSubject();
			mensagens[i][2] = user.getCaixaEntrada().get(i).getMessage();
			mensagens[i][3] = dtfGeral.format(user.getCaixaEntrada().get(i).getDate());
		}

		table1.setModel(new DefaultTableModel(mensagens,
			 new String [] { "De", "Assunto", "Mensagem", "Data"}){
				 boolean[] canEdit = new boolean []{
					 false, false, false, false
				 };
				 @Override
				 public boolean isCellEditable(int rowIndex, int columnIndex) {
					 return canEdit [columnIndex];
				 }
		});
		
		//Create the scroll pane and add the table to it.
		JScrollPane scrollPane = new JScrollPane(table1);

		caixaEntrada.add(scrollPane);

		return caixaEntrada;
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro você deve desenhar o JDialog. Você poderia passar um objeto "Mensagem" por parâmetro.

 

public class JDialogMensagem extends JDialog {
   private Mensagem mensagem;

   public JDialogMensagem(Component pai, boolean modal, Mensagem objMensagem) {
	   this.mensagem = objMensagem;
	   // códigos de interface
   }
}

Agora você precisa adicionar um listener para sua tabela. Você pode implementá-lo na classe ou simplesmente adicioná-lo ao objeto.

 

this.table1.addMouseListener(new MouseListener) {
   public void mouseClicked(MouseEvent e) {
	  if(e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
		  Mensagem msg = new Mensagem();
		  // preencha o objeto msg recuperando os valores da tabela getModel().getValueAt(...);
		JDialogMensagem frame = new JDialogMensagem(this, true, msg);
	  }
   }

   // implementar todos os métodos abstratos (deixe-os em branco) de MouseListener: pressed, released, entered e exited.
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito obrigado Vergil, voce salvou minha vida.

só uma coisinha, como faço para pegar os dados da linha selecionada?

 

Outra coisa, como faço o refresh de x em x segundos?

 

**********************************************************

EDIT

 

ja concegui o double click falta só o refresh de x em x segundos.

Alguem ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para pegar os valores de uma linha selecionada da tabela você pode fazer assim:

 

int linha = table1.getSelectedIndex();
DefaultTableModel modelo = (DefaultTableModel) table1.getModel();
Mensagem msg = new Mensagem();
msg.setRemetente(modelo.getValueAt(linha, 0)); // segundo parâmetro é o índice da coluna.
msg.setAssunto(modelo.getValueAt(linha, 1));
//...

Para implementar o recurso de atualização automática você deve utilizar-se de threads. Crie um objeto TimerTask e no método run() você define um novo modelo para a tabela.

 

Timer timer = new Timer();
int segundos = 10;
TimerTask tarefa = new TimerTask(
	public void run() {
		table1.setModel(/*seu modelo aqui*/);
		
	}
);
timer.schedule(tarefa, (segundos * 1000));

Esses códigos foram feitos no bloco de notas e podem apresentar algum erro de sintaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.