Melhor forma de armazenar campo ID sem aparecer em uma jtable

6 respostas
P

Pessoal tenho um pequeno app que armazena alguns dados em uma tabela do Oracle, essa tabela tem um seqüencia para gerar um campo ID, e quando gravo em exibo alguns campos gravados na tabela em uma jTable para melhor controle do usuário, tudo funcionando bem.
Agora preciso dar a opção do usuário apagar alguma das linhas gravadas, gerei esse processo (de seleção na jTable) funcionando beleza, contudo o ideal é eu pegar o campo ID para passar ele pro delete, porém eu varro as linhas da jTable que não armazenam o ID, alguém pode indicar uma forma coerente, sem fazer gambiarra de como armazenar esse ID e sem exibi-lo na minha jTable.
Não sei se fui claro o suficiente. :lol:

6 Respostas

T

Se você definir seu próprio TableModel, pode fazer um que reflita os campos de seu objeto (que deve conter o ID) sem fazer aparecer o ID. E dessa forma, quando você selecionar uma linha, poderá obter o ID.

Pedrosa

Tive a mesma dúvida aqui:
http://www.guj.com.br/posts/list/62404.java

P

Pessoal valeu, realmente eu não sabia que podia armazenar um dado no modelo sem realmente exibi-lo na minha jTable.

Em tempo, eu uso DefaultTableModel, isso interfere alguma coisa em relação ao TableModel?

T

Pois é, o recomendado, se você quer usar seu próprio List<SeuObjeto> para servir de base a um TableModel, é derivá-lo de AbstractTableModel, em vez de usar o DefaultTableModel.

T

Um exemplo bobo:

class MeuObjeto {
    int id;
    String nome;
    String endereco;
}

class MeuTableModel extends AbstractTableModel {
    private List<MeuObjeto> lista;    

    public MeuTableModel () {
         lista = new ArrayList<MeuObjeto>();
    }

    public int getRowCount() {
        return lista.size();
    }
  public int getColumnCount() {
       return 2; // estou pulando o "id"
  }
  public Object getValueAt(int row, int column) {
      // coluna 0 = "nome", coluna 1 = "endereco"
      switch (column) {
        case 0: return lista.get(i).nome;
        case 1: return lista.get(i).endereco;
        default: return null;
      }
  }
   // aqui um método de MeuTableModel que você deve chamar para adicionar
   // novas linhas
   public void addRow (MeuObjeto obj) {
      lista.add (obj);
   }
   // crie outros métodos...
}
davidbuzatto

Quando eu populo a JTable, eu armazeno em uma das células (normalmente a primeira coluna) o objeto inteiro e não só algum atributo do mesmo, assim quando eu clico eu consigo recuperar o objeto todo. Para exibição eu implemento o toString que vai retornar apenas o valor q eu quero q seja exibido na célula.

Acho que é mais simples.

Criado 10 de julho de 2007
Ultima resposta 10 de jul. de 2007
Respostas 6
Participantes 4