mapb_1990 0 Denunciar post Postado Maio 18, 2009 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
Vergil 15 Denunciar post Postado Maio 18, 2009 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
mapb_1990 0 Denunciar post Postado Maio 18, 2009 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
Vergil 15 Denunciar post Postado Maio 19, 2009 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