Você pode implementar os métodos do TableModel (getValueAt, getColumnName, etc) para exibir apenas as três colunas citadas. E cria um método adicional que retorna o objeto referente a uma linha em específico.
Supondo que sua classe de domínio se chame Funcionario, o método ficaria mais ou menos assim:
public Funcionario getFuncionario(int indiceLinha) {
return lista.get(indiceLinha); // lista neste caso seria uma List de funcionários do seu TableModel
}
Este método retorna o funcionário com todos os atributos, inclusive os que não foram mostrados na JTable.
D
danilosmart
Eric Yuzo:
Você pode implementar os métodos do TableModel (getValueAt, getColumnName, etc) para exibir apenas as três colunas citadas. E cria um método adicional que retorna o objeto referente a uma linha em específico.
Supondo que sua classe de domínio se chame Funcionario, o método ficaria mais ou menos assim:
public Funcionario getFuncionario(int indiceLinha) {
return lista.get(indiceLinha); // lista neste caso seria uma List de funcionários do seu TableModel
}
Este método retorna o funcionário com todos os atributos, inclusive os que não foram mostrados na JTable.
Vlw pela Resposta, Eric!!
Desculpa Cara, Mas eu não entendi direito.
Eu crio esse método dentro do meu TableModel ou dentro da tela Principal?
Porque assim no meu programa, quando eu clico sobre uma linha ele seta os valores que estão na tabela, em seus campos.
Mas eu só consigo fazer isso se tiver a coluna, porque ai eu uso o getValueAt(row,column).
Vlwww
Eric_Yuzo
No seu TableModel.
O getValueAt não é a melhor opção para recuperar os dados da JTable.
Com o objeto Funcionario em mãos, você pode recuperar os atributos pelos getters e setar nos campos de sua tela.
D
danilosmart
Eric Yuzo:
No seu TableModel.
O getValueAt não é a melhor opção para recuperar os dados da JTable.
Com o objeto Funcionario em mãos, você pode recuperar os atributos pelos getters e setar nos campos de sua tela.
Vou mostrar a linha que eu faço os set da tabela para os campos.
private void tableMouseClicked(java.awt.event.MouseEvent evt) {
Pessoa p = new Pessoa();
int linhaSelecionada = table.getSelectedRow();
tfData.setText(table.getValueAt(linhaSelecionada, 1).toString());
tfMotivo.setText(table.getValueAt(linhaSelecionada, 2).toString());
tfSaida.setText(table.getValueAt(linhaSelecionada, 3).toString());
tfChegada.setText(table.getValueAt(linhaSelecionada, 4).toString());
tfKmRodado.setText(table.getValueAt(linhaSelecionada, 5).toString());
tfCodigoReferencia.setText(table.getValueAt(linhaSelecionada, 0).toString());
}
Eu faço a inserção dos valores na tabela, pelos getters e setters tbm:
if(evt.getKeyCode()==KeyEvent.VK_ENTER){if(tfMotivo.getText().trim().equals("")){System.out.println("Faltou Valor no campo Motivo");}else{if(tfData.getText().trim().equals("")){System.out.println("Faltou Valor no campo Data");}else{if(tfSaida.getText().trim().equals("")){System.out.println("Faltou Valor no Campo Saida");}else{if(tfChegada.getText().trim().equals("")){System.out.println("Faltou Valor no Campo Chegada");}else{if(tfKmRodado.getText().trim().equals("")){System.out.println("Faltou Valor no Campo Km Rodado");}else{if(tfLinkMap.getText().trim().equals("")){System.out.println("Faltou Valor no Campo LinkMap");}else{intnum=0;intcoluna=table.getRowCount();Pessoap=newPessoa();coluna++;p.setCodigoReferencia(coluna);p.setDatalancamento(tfData.getText());p.setMotivo(tfMotivo.getText());p.setSaida(tfSaida.getText());p.setChegada(tfChegada.getText());p.setKmrodado(Integer.parseInt(tfKmRodado.getText()));model.inserir(p);limparCampos();}}}}}}
Sera eu deveria mudar alguma coisa no meu programa?
Vlw Eric.
Eric_Yuzo
Você chegou a criar um TableModel para a classe Pessoa?
D
danilosmart
Sim, Eu utilizei os modelo de TableModel que encontrei no Forum.
Segue ele:
Então, você pode criar no seu TableModel um método "getPessoa" como falei antes.
Na hora de preencher os campos, você faz o seguinte:
int linhaSelecionada = table.getSelectedRow();
PessoaTableModel model = (PessoaTableModel) table.getModel();
Pessoa pessoa = model.getPessoa(linhaSelecionada);
tfData.setText(pessoa.getDataLancamento());
tfMotivo.setText(pessoa.getMotivo());
// E assim por diante...
Desta forma, você pode pegar qualquer atributo do objeto Pessoa, mesmo que não haja uma coluna para ele na JTable.
E dê uma revisada no nome do seu TableModel. Ele se chama ProdutoTableModel, mas possui uma lista de pessoas. Seria mais indicado se chamar PessoaTableModel.
D
danilosmart
Valeu! Eric!
Era isso mesmo que eu queria!!! funcionou do jeito que eu queria!!!