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:
Melhor forma de armazenar campo ID sem aparecer em uma jtable
6 Respostas
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.
Tive a mesma dúvida aqui:
http://www.guj.com.br/posts/list/62404.java
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?
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.
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...
}
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.