Jtable, me tirando o sono!

11 respostas
admlaugusto

Meu problema, apesar de ler tudo que podia, fazer alguns testes, olhar na API, ele ainda perssiste :slight_smile:
(quero selecionar uma linha da jtable, dar dos clicks e abrir um formulário para que possa ser feitas as alterações em form)
Já consigo contar os click, abrir o formulário, porém ele não caregar os dados da jtable. Espero ter sido claro no que preciso. E resumo, se puder me ajudar, ficarei muito agradecido

dados do jtable de origem

codigo nome uf
---------- -------- ------
---------- -------- ------
---------- -------- ------

Já consegui: Seleciono uma linha na Jtable, dou dois clicks, ele abre um formulário

Preciso: campos a serem preenchidos, no formulario com base na jtable de origem

Codigo |______|
Nome |__________|
Uf |
|

11 Respostas

H
Existe um método no DefaultTableModel onde você consegue pegar

os valores da linha inteira da uma olhada na API, se eu não estou
enganadao ele retorna um Object [] .

admlaugusto

ola…
mas eu não tou sabendo usar este método.

no arquivo que tem o jtable, no evento do mouse.

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
  if (evt.getClickCount()==2) {   
    
   // new formulario().show();
    formulario f = new formulario();
    f.mostraConsulta(jTable1.getValueAt(jTable1.getSelectedRow(),0));        
    }

e no arquivo formulario.java criei um método mostraConsulta

public void mostraConsulta(int codigo, String nome){
    tf_codigo.setText(String.valueOf(codigo));
    tf_nome.setText(nome); 
   }
Marky.Vasconcelos

Uma dica NÃO use DefaultTableModel, crie uma classe que extende de AbstractTableModel, para fazer o seu model, com ele voce pode criar um método que pegue direto um Objeto pelo número da linha selecionada.

admlaugusto

“Uma dica NÃO use DefaultTableModel, crie uma classe que extende de AbstractTableModel, para fazer o seu model, com ele voce pode criar um método que pegue direto um Objeto pelo número da linha selecionada.”

Obrigado, mara para mim que já tou perdido, ficou ainda mais…
não tem como então da forma que o código está, ele enviar o conteúdo pra lá?

Dados complementares estou usando a IDE netbeans 6.1 RC

Marky.Vasconcelos

Tenta

TableModel model = jTable1.getTableModel();
f.mostraConsulta(model.getValueAt(jTable1.getSelectedRow(),0));
admlaugusto

Ufa! Prontinho e resolvido (pelo menos consegui pegar da jtable e levar para o fomulário)

if (evt.getClickCount()==2) {   
   
 String codigo = "aaa" ;           
 String nome = "aaa"; 
 String uf = "aaa"; 
 

    codigo= (String) jTable1.getValueAt(jTable1.getSelectedRow(),0);        
    nome = (String) jTable1.getValueAt(jTable1.getSelectedRow(),1);        
    uf   = (String) jTable1.getValueAt(jTable1.getSelectedRow(),2);        
    new formulario().show(); 
    formulario.tf_codigo.setText(codigo);
    formulario.tf_nome.setText(nome);  
    formulario.tf_uf.setText(uf);  
}

Obrigado a todos pela ajuda e paciência.

W

Porque nao usar o DefaultTableModel ?
Pessoalmente nunca senti necessidade de usar AbstractTableModel inves de DefaultTableModel.

//Daniel

Marky.Vasconcelos

Porque nao usar o DefaultTableModel ?
Pessoalmente nunca senti necessidade de usar AbstractTableModel inves de DefaultTableModel.

//Daniel
Vou dar um exemplo simples.

Tendo uma classe chamada Pessoa com os atributos nome, idade e sexo

Em uma DefaultTableModel
Voce adicionaria uma linha para mostrar os dados da pessoa assim

model.addRow(new String[]{pessoa.nome,pessoa.nome,pessoa.sexo});

Se voce adaptar sua TableModel voce poderia simplesmente adicionar uma pessoa assim

model.addRow(pessoa);//Mais simples não acha?

Para usar os dados da tabela com a DefaultTableModel

int selectedRow = table.getSelectedRow();
Pessoa p = new Pessoa();
p.nome = model.getValueAt(selectedRow,0);
p.idade = model.getValueAt(selectedRow,1);
p.sexo = model.getValueAt(selectedRow,2);

Enquanto em uma AbstractTableModel voce poderia implementar algo para fazer simplesmente assim:

int selectedRow = table.getSelectedRow();
Pessoa p = model.get(selectedRow);

Não acha mais vantagem?

fabim

Procure adicionar OBJETOS na JTable, no JComboBox, etc…

assim vc pega os objetos e passa pra quem precisar… sem precisar ficar capturado valores “primitivos” ( int, String ).

Marky.Vasconcelos

fabiocsi:
Procure adicionar OBJETOS na JTable, no JComboBox, etc…

assim vc pega os objetos e passa pra quem precisar… sem precisar ficar capturado valores “primitivos” ( int, String ).

Ou seja, algo como falei.
^^

W

Mark_Ameba:
fabiocsi:
Procure adicionar OBJETOS na JTable, no JComboBox, etc…

assim vc pega os objetos e passa pra quem precisar… sem precisar ficar capturado valores “primitivos” ( int, String ).

Ou seja, algo como falei.
^^

Eh verdade, acabei de implementar um programinha aqui de teste usando AbstractTableModel, eh um pouquinho mais “chato” de fazer mas no final depois de implementado fica uma beleza :slight_smile:

Valeu pelas explicacoes.

Criado 13 de abril de 2008
Ultima resposta 15 de abr. de 2008
Respostas 11
Participantes 5