JTable Removendo colunas em tempo de execução

Bom dia a todos!

ViniGodoi achei seu post procurando na net sobre JTable, e está me ajudando muito, parabéns pelo exemplo. Entretanto, estou com uma dúvida de como atualizar o Jtable pois tenho a seguinte situação:

Tenho um Jtable com os dados na tela principal, essa tela só mostra os dados, para adicionar ou editar dados eu clico num botão nessa tela e outra tela abre com os campos para edição ou criação de um novo registro. Bem, quando salvo o registro, preciso que o JTable da tela de trás seja atualizado.

Andei pesquisando sobre o padrão Observer, mas não estou conseguindo fazer o que preciso. Será que é possível vc postar um breve exemplo de como resolver esse problema da forma mais correta para o meu caso?

Abraço!

No seu caso não é necessário usar um Observer. Simplesmente abra um JDialog, e faça a comunicação entre as duas janelas através de passagem de parâmetros, como nesse exemploa aqui:
http://www.guj.com.br/posts/list/55710.java#292687

Desculpe não responder antes, estava com outras atividades…

Perfeito!!!

Acabei de fazer a modificação de acordo com o exemplo que vc passou e funcionou perfeitamente.

ViniGodoy obrigado pela ajuda! :smiley:

ViniGodoy, bom dia!

Agora estou com um problema que me deixou surpreso. Estou montando um jtable e nesse caso tenho que aplicar uma barra de rolagem horizontal, pois o tamanho dele não comporta
todas as colunas que preciso mostrar. O problema é que quando eu rolo a barra horizontal, o header fica desformatado nas colunas do final, como se não renderizasse corretamente, segue os fragmentos para melhor compreensão.

Esqueci de postar o fragmento de código da mensagem acima:

   try {
       DefaultTableCellRenderer rendererCentro = new DefaultTableCellRenderer();   
       rendererCentro.setHorizontalAlignment(SwingConstants.CENTER);   

       DefaultTableCellRenderer rendererDireita = new DefaultTableCellRenderer();   
       rendererDireita.setHorizontalAlignment(SwingConstants.RIGHT);   

       DefaultTableCellRenderer rendererEsquerda = new DefaultTableCellRenderer();   
       rendererEsquerda.setHorizontalAlignment(SwingConstants.LEFT);   

       [b]JTableHeader header = jTable.getTableHeader();   
       header.setPreferredSize(new Dimension(0, 35));
       
       jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       jTable.setAutoscrolls(true);[/b]
       
       TableColumnModel modeloDaColuna = jTable.getColumnModel();

[quote=ViniGodoy]Só pra constar. Eu já fui clipeiro e admito que no começo dá muita dificuldade em entender os conceitos de OO e do Java. E, para ser bem sincero, o JTextField com formatação do Java não chega aos pés do existente no clipper.

O que você deve entender é que nos métodos do AbstractTableModel você estará dizendo ao JTable o que ela deve desenhar. Cada método, diz ao java uma coisa diferente.

Por exemplo. Considere que você vai escrever um TableModel para mostrar livros na tela, e quer exibir 2 colunas, uma para o autor (coluna 0) e outra para o título (coluna 1).

public class LivrosTableModel extends AbstractTableModel {
    private static final int COL_AUTOR = 0;
    private static final int COL_TITULO = 1;

    private List<Livro> valores;       

    //Esse é um construtor, que recebe a nossa lista de livros
    public TitulosTableModel(List<Livro> valores) {
          this.valores = new ArrayList<Livro>(valores);
    }

    public int getRowCount() {
        //Quantas linhas tem sua tabela? Uma para cada item da lista.
        return valores.size();
    }

    public int getColumnCount() {
        //Quantas colunas tem a tabela? Nesse exemplo, só 2.
        return 2;
    }

    public String getColumnName(int column) {
        //Qual é o nome das nossas colunas?
        if (column == COL_AUTOR) return "Autor";
        if (column == COL_TITULO) return "Título";
        return ""; //Nunca deve ocorrer
    }

    public Object getValueAt(int row, int column) {
        //Precisamos retornar o valor da coluna column e da linha row.
        Livro titulo = valores.get(row);
        if (column == COL_AUTOR) return titulo.getTitulo();
        else if (column == COL_TITULO) return titulo.getAutor().getNome();
        return ""; //Nunca deve ocorrer
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        //Vamos alterar o valor da coluna columnIndex na linha rowIndex com o valor aValue passado no parâmetro.
        //Note que vc poderia alterar 2 campos ao invés de um só.
        if (columnIndex== COL_TITULO) titulo.setTitulo(aValue.toString());
        else if (columnIndex== COL_AUTOR) titulo.getAutor().setNome(aValue.toString());
    }

    public Class<?> getColumnClass(int columnIndex) {
        //Qual a classe das nossas colunas? Como estamos exibindo texto, é string.
        return String.class;
    }
    
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        //Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa tabela toda é.
        return true;
    }
    //Já que esse tableModel é de livros, vamos fazer um get que retorne um livro inteiro.
    //Isso elimina a necessidade de chamar o getValueAt() nas telas. 
    public Livro get(int row) {
        return valores.get(row);
    }
}

Depois, para usar esse model vc só faz:
suaTable.setModel(new LivrosTableModel(listaDeLivros));

O que o Java faz na hora de desenhar a tabela? O objeto JTable:

  1. Chama os método getColumnsCount() e getRowsCount() para descobrir quantas linhas e colunas deve desenhar;
  2. Chama o método getColumnTitle() para saber que informações irá no título da tabela;
  3. Chama o método getValueAt para saber o que escrever dentro da célula
  4. Chama o método getColumnClass() para saber como desenhar a informação. Em células do tipo Boolean.class, aparecerá um checkbox, células do tipo Integer.class serão alinhadas a direita.
  5. E, também, chama o método isCellEditable para verificar se deve ou não habilitar o editor.

O que as vezes demora a cair a ficha é notar que seus métodos estão respondendo ao Java. Quem chamará um método como
public Object getValueAt(int row, int column) é o JTable, enquanto está se desenhando.
Ele que dirá "Ei, quero desenhar o objeto da linha 1, coluna 3, que valor você tem pra mim aí?"

Você vai notar, depois que aprender a usar o AbstractTableModel, que o trabalho que você tem hoje no Default é enorme. Parece ainda maior se você considerar a existência de modelos ainda mais automáticos, como o do Mark. O seu código atual também fica muito desorganizado. A escrita da tabela se mistura ao código da interface gráfica. Estendendo do abstract, tudo fica separadinho:
Desenho é com a JTable
Dados é com o model
Lógica da interface é na Tela.

Desculpe o tom provocativo do post anterior. A idéia era realmente te irritar. Nem que vc se motivasse novamente a aprender o model, só pra depois jogar na minha cara. :lol:

O esforço realmente vale a pena.[/quote]

Fiz esse exemplo do Vini, mas não consigo fazer mostrar o nome das Colunas quando mostra a tabela.
Alguém saberia dizer o que pode estar acontecendo, pq pelo que entendi o método getColumnName() é que adiciona o nome as colunas. E ele é chamado e os valores são retornados(vi pelo debug), mas quando aparece a tabela, aparece sem nome algum.

Você colocou sua tabela dentro de um JScrollPane? É necessário coloca-la para que o nome das colunas apareça.

Que rápido Vini :wink:

Hehe, não, coloquei em um JPanel.

Era isso mesmo, com JScrollPane funcionou.

Valeu Vini, muito boa essa dica. Realmente DefaultTableModel é bem mais chato de trabalhar.

O mais engraçado é que foi rápido e coincidência. Eu cheguei em casa, olhei os e-mails e a primeira mensagem era a desse tópico.


Bom, sei que é uma duvida meio tosca, mas é que eu to passando meio mal pra pegar a implementação de um modelo próprio pra tabela.
Até que peguei com DefaultTableModel mais realmente o código fica meio confuso. 
Se alguém puder só explicar melhor como ficaria um exemplo dessa clase <Livro>  
É que eu to tendo alguns erros quando tento fazer a minha tabela aqui.  :?
Agradeço desde já !

Bom, sei que é uma duvida meio tosca, mas é que eu to passando meio mal pra pegar a implementação de um modelo próprio pra tabela.
Até que peguei com DefaultTableModel mais realmente o código fica meio confuso.
Se alguém puder só explicar melhor como ficaria um exemplo dessa clase
É que eu to tendo alguns erros quando tento fazer a minha tabela aqui. :?
Agradeço desde já !

[code]public final class Livro {
private String titulo;
private Autor autor;

public Livro(String titulo, Autor autor) {
setTitulo(titulo);
setAutor(autor);
}

public void setTitulo(String titulo) {
if (titulo == null)
throw new IllegalArgumentException(“O título não pode ser nulo!”);

this.titulo = titulo.trim();

}

public String getTitulo() {
return titulo;
}

public void setAutor(Autor autor) {
if (autor == null)
throw new IllegalArgumentException(“O autor não pode ser nulo!”);
this.autor = autor;
}

public Autor getAutor() {
return autor;
}
}
[/code]

E a classe Autor:

public final class Autor {
    private String nome;
    private String descricao;

    public Autor(String nome, String descricao) {
       setNome(nome);
       setDescricao(descricao);
    }

    public void setNome(String nome) {
        if (nome == null)
            throw new IllegalArgumentException("O nome não pode ser nulo!");
        this.nome = nome.trim();
    }   

    public void getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        if (descricao == null)
            throw new IllegalArgumentException("A descricao não pode ser nula!");
        this.descricao = descricao.trim();
    }   

    public void getNome() {
        return nome;
    }
}

Pooooow brigadão cara ! _
Era isso msm que queria !

Tudo pela morte do DefaultTableModel.

1 curtida

Oi VinnyGodoy.

Eu sou novo em Java e estou tentando usar o AbstractTableModel.

Atualmente eu consigo obter o objeto se eu clicar duas vezes, porém, se eu reorganizo a tabela clicando em uma coluna, e clico duas vezes novamente ele me retorna o primeiro item de quando eu não tinha reorganizado.

Esta aqui é minha AbstractTableModel:

public class AlunoTableModel extends AbstractTableModel {
	
    private static final long serialVersionUID = 1L;
	
    private static final int COL_nome_aluno = 0;
    private static final int COL_endereco_aluno = 1;
    private static final int COL_tel_aluno = 2;
    private static final int COL_cel_aluno = 3;
    private static final int COL_atestado_aluno = 4;
    private static final int COL_dtNasc_aluno = 5;
    private static final int COL_dtDePgto_aluno = 6;
    private static final int COL_planoPagamento = 7;

    private List&lt;Aluno&gt; alunos;
  
    public AlunoTableModel(List&lt;Aluno&gt; _alunos) {
          this.alunos = new ArrayList&lt;Aluno&gt;(_alunos);
    }

    public int getRowCount() {  
        return alunos.size();  
    }  
  
    public int getColumnCount() {  
        return 8;
    }  
  
    public String getColumnName(int column) {  
        if (column == COL_nome_aluno) return &quot;Nome&quot;;
        if (column == COL_endereco_aluno) return &quot;Endereço&quot;;
        if (column == COL_tel_aluno) return &quot;Telefone&quot;;
        if (column == COL_cel_aluno) return &quot;Celular&quot;;
        if (column == COL_atestado_aluno) return &quot;Atestado&quot;;
        if (column == COL_dtNasc_aluno) return &quot;Data de Nascimento&quot;;
        if (column == COL_dtDePgto_aluno) return &quot;Dia de Pagamento&quot;;
        if (column == COL_planoPagamento) return &quot;Plano de Pagamento&quot;;
        return &quot;&quot;;
    }  
  
    public Object getValueAt(int row, int column) {  
        Aluno aluno = alunos.get(row);
        if (column == COL_nome_aluno) return aluno.getNome_aluno();
        else if (column == COL_endereco_aluno) return aluno.getEndereco_aluno();
        else if (column == COL_tel_aluno) return aluno.getTel_aluno();
        else if (column == COL_cel_aluno) return aluno.getCel_aluno();
        else if (column == COL_atestado_aluno) return aluno.isAtestado_aluno();
        else if (column == COL_dtNasc_aluno) {
			SimpleDateFormat f = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);    
			Date d1 = null;
			
			try {    
			    d1 = f.parse(aluno.getDtNasc_aluno().toString());                
			} catch (Exception e) {    
			    e.printStackTrace();    
			}    
			    
			SimpleDateFormat format = new SimpleDateFormat(&quot;dd/MM/yyyy&quot;);    
			    
			return format.format(d1);
        }
        else if (column == COL_dtDePgto_aluno) return aluno.getDtDePgto_aluno();
        else if (column == COL_planoPagamento) return aluno.getPlanoPagamento();
        throw new IllegalArgumentException(&quot;Coluna Inválida&quot;);
    }  
  
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {  
    	Aluno aluno = new Aluno();
		DateFormat format = new SimpleDateFormat(&quot;dd/MM/yyyy&quot;);
    	
        if (columnIndex == COL_nome_aluno)
        	aluno.setNome_aluno(aValue.toString());  
        else if (columnIndex == COL_endereco_aluno)
        	aluno.setEndereco_aluno(aValue.toString());
        else if (columnIndex == COL_tel_aluno) 
        	aluno.setTel_aluno(aValue.toString());
        else if (columnIndex == COL_cel_aluno) 
        	aluno.setCel_aluno(aValue.toString());
        else if (columnIndex == COL_dtNasc_aluno)
			try {
				aluno.setDtNasc_aluno(format.parse(aValue.toString()));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		else if (columnIndex == COL_dtDePgto_aluno) 
        	aluno.setDtDePgto_aluno(Integer.parseInt(aValue.toString()));
        else if (columnIndex == COL_planoPagamento) 
        	aluno.setPlanoPagamento(aValue.toString());
    }
  
    public Class&lt;?&gt; getColumnClass(int columnIndex) {  
    	if (columnIndex == 4)
    		return Boolean.class;
    	if (columnIndex == 6)
    		return Integer.class;
        return String.class;  
    }  
      
    public boolean isCellEditable(int rowIndex, int columnIndex) {  
        return false;
    }  
    
    public Aluno get(int row) {  
        return alunos.get(row);  
    }
}

Pra obter o objeto eu usei o método abaixo:

    public Aluno getAlunoDaLinhaSelecionada(List&lt;Aluno&gt; alunosList) {
    	if (table.getSelectedRow() == -1)
    		return null;
    	
    	return alunosList.get(table.getSelectedRow());
    }

e aqui está o evento do duplo clique:

		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				if (arg0.getClickCount() == 2) {
					Aluno aluno = VPesquisarAluno.this.getAlunoDaLinhaSelecionada(TodosAlunos);
					
					if (pesquisar == true) {
						VAluno vAluno = new VAluno(false, true, true, true, aluno);
						vAluno.setVisible(true);
						vAluno.setLocationRelativeTo(null);
					} else if (alterar == true) {
						VAluno vAluno = new VAluno(false, true, false, false, aluno);
						vAluno.setVisible(true);
						vAluno.setLocationRelativeTo(null);
					} else if (excluir == true) {
						VAluno vAluno = new VAluno(false, false, true, false, aluno);
						vAluno.setVisible(true);
						vAluno.setLocationRelativeTo(null);
					} else if (pgto == true) {
						VPgto vPgto = new VPgto();
						vPgto.setVisible(true);
						vPgto.setLocationRelativeTo(null);
					}
		        }
			}
		});

se puder ajudar, ou ao menos responder, agradeço desde já.

Consegui encontrar este post (do próprio ViniGodoy) sobre meu problema.

[quote=ViniGodoy]int viewIndex = jTable1.getSelectedRow(); //índice do que está sendo exibido na tabela int modelIndex = jTable1.convertRowIndexToModel(viewIndex); //Índice do conteúdo dentro do model Cliente c = listCliente.get(modelIndex);

Por essas e outras, é bom ler o javadoc. E também os Tutoriais, e não programar por tentativa e erro.

E claro, [color=red]não usar o DefaultTableModel.[/color][/quote]

Segue a resolução caso mais alguém precise:

	public Aluno getAlunoDaLinhaSelecionada() {  
		if (table.getSelectedRow() == -1)
			return null;

		int viewIndex = table.getSelectedRow(); //índice do que está sendo exibido na tabela  
		int modelIndex = table.convertRowIndexToModel(viewIndex); //Índice do conteúdo dentro do model  
		
		return TodosAlunos.get(modelIndex);
	}

suaTable.setModel(new LivrosTableModel(listaDeLivros));
nesta linha a "listaDeLivros " seria oque ?? que vc esta passando para a tabela??

[quote=souza_lucas]suaTable.setModel(new LivrosTableModel(listaDeLivros));
nesta linha a "listaDeLivros " seria oque ?? que vc esta passando para a tabela??[/quote]

Um List, contendo os livros que você quer que sejam carregados na sua tabela.
Provavelmente essa lista teria sido carregada do seu DAO.

boa noite… sei que o tópico é antigo mas a pergunta é pertinente ao assunto…

fiz todo codigo aqui… sem erros no depurador…

mas não to entendendo justamente o método para alterar a jTable dentro do jPanel

o que vai dentro da nova instancia MontadoraTableModel ??

onde coloco esse codigo no jPanel? logo apos o initComponents()?

public MontadoraForm() { initComponents();

só ta faltando isso pra eu botar esse treco pra rodar… e não usar o DefaultTableModel que até funcinou de primeira… mas por recomendação to querendo evitar de usar

segue a classe de entidade de banco de dados:

package oficina;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Andre
 */
@Entity
@Table(name = "MONTADORA")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Montadora_DB.findAll", query = "SELECT m FROM Montadora_DB m"),
    @NamedQuery(name = "Montadora_DB.findById", query = "SELECT m FROM Montadora_DB m WHERE m.id = :id"),
    @NamedQuery(name = "Montadora_DB.findByMarca", query = "SELECT m FROM Montadora_DB m WHERE m.marca = :marca"),
    @NamedQuery(name = "Montadora_DB.findByService", query = "SELECT m FROM Montadora_DB m WHERE m.service = :service"),
    @NamedQuery(name = "Montadora_DB.findByUsuario", query = "SELECT m FROM Montadora_DB m WHERE m.usuario = :usuario"),
    @NamedQuery(name = "Montadora_DB.findBySenha", query = "SELECT m FROM Montadora_DB m WHERE m.senha = :senha"),
    @NamedQuery(name = "Montadora_DB.findByTel", query = "SELECT m FROM Montadora_DB m WHERE m.tel = :tel"),
    @NamedQuery(name = "Montadora_DB.findByLixo", query = "SELECT m FROM Montadora_DB m WHERE m.lixo = :lixo")})
public class Montadora_DB implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;
    @Basic(optional = false)
    @Column(name = "MARCA")
    private String marca;
    @Column(name = "SERVICE")
    private String service;
    @Column(name = "USUARIO")
    private String usuario;
    @Column(name = "SENHA")
    private String senha;
    @Column(name = "TEL")
    private String tel;
    @Basic(optional = false)
    @Column(name = "LIXO")
    private short lixo;

    public Montadora_DB() {
    }

    public Montadora_DB(Integer id) {
        this.id = id;
    }

    public Montadora_DB(Integer id, String marca, short lixo) {
        this.id = id;
        this.marca = marca;
        this.lixo = lixo;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getService() {
        return service;
    }

    public void setService(String service) {
        this.service = service;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public short getLixo() {
        return lixo;
    }

    public void setLixo(short lixo) {
        this.lixo = lixo;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Montadora_DB)) {
            return false;
        }
        Montadora_DB other = (Montadora_DB) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "oficina.Montadora_DB[ id=" + id + " ]";
    }
    
}

segue a classe MontadoraTableModel

package oficina;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Andre
 */
public class MontadoraTableModel extends AbstractTableModel {

    private static final int NOME = 0;
    private static final int TELEFONE = 1;
    private static final int SERVICE = 2;
    private static final int USUARIO = 3;
    private static final int SENHA = 4;
    private static final int ID = 5;
    private static final int LIXO = 6;

    private List<Montadora_DB> montadora;

    //Esse é um construtor, que recebe a nossa lista de livros  
    public void MontadoraTableModel(List<Montadora_DB> _montadora) {
        this.montadora = new ArrayList<Montadora_DB>(_montadora);
    }

    public int getRowCount() {
        //Quantas linhas tem sua tabela? Uma para cada item da lista.  
        return montadora.size();
    }

    public int getColumnCount() {
        //Quantas colunas tem a tabela? Nesse exemplo, só 2.  
        return 7;
    }

    public String getColumnName(int column) {
        //Qual é o nome das nossas colunas?  
        switch (column) {
            case NOME:
                return "MONTADORA";
            case TELEFONE:
                return "TELEFONE";
            case SERVICE:
                return "SERVICE";
            case USUARIO:
                return "USUARIO";
            case SENHA:
                return "SENHA";
            case ID:
                return "ID";
            case LIXO:
                return "LIXO";
        }
        /*
         if (column == NOME) {
         return "MONTADORA";
         }
         if (column == TELEFONE) {
         return "TELEFONE";
         }
         if (column == SERVICE) {
         return "TELEFONE";
         }
         if (column == USUARIO) {
         return "USUARIO";
         }
         if (column == SENHA) {
         return "SENHA";
         }
         return ""; //Nunca deve ocorrer  */
        throw new IllegalArgumentException("GetColumnName Inválido!");
    }

    public Object getValueAt(int row, int column) {
        //Precisamos retornar o valor da coluna column e da linha row.  
        Montadora_DB montadora = this.montadora.get(row);

        /*switch (column) {
         case NOME:
         return montadora.getMarca();            
         case TELEFONE:
         return montadora.getTel();             
         case SERVICE:
         return montadora.getService();              
         case USUARIO:
         return montadora.getUsuario();
         case SENHA:
         return montadora.getSenha(); 
         case ID:
         return montadora.getId();
         case LIXO:
         return montadora.getLixo();
         }
         */
        if (column == NOME) {
            return montadora.getMarca();
        } else if (column == TELEFONE) {
            return montadora.getTel();
        } else if (column == SERVICE) {
            return montadora.getService();
        } else if (column == USUARIO) {
            return montadora.getUsuario();
        } else if (column == SENHA) {
            return montadora.getSenha();
        } else if (column == ID) {
            return montadora.getId();
        } else if (column == LIXO) {
            return montadora.getLixo();
        }
        //return ""; //Nunca deve ocorrer  
        throw new IllegalArgumentException("Coluna Inválida");
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Montadora_DB montadora = this.montadora.get(rowIndex);
        //Vamos alterar o valor da coluna columnIndex na linha rowIndex com o valor aValue passado no parâmetro.  
        //Note que vc poderia alterar 2 campos ao invés de um só.  
        if (columnIndex == NOME) {
            montadora.setMarca(aValue.toString());
        } else if (columnIndex == TELEFONE) {
            montadora.setTel(aValue.toString());
        } else if (columnIndex == SERVICE) {
            montadora.setService(aValue.toString());
        } else if (columnIndex == USUARIO) {
            montadora.setUsuario(aValue.toString());
        } else if (columnIndex == SENHA) {
            montadora.setSenha(aValue.toString());
        } //else if (columnIndex == ID) {
          //  montadora.setId(aValue.toString());
        //} else if (columnIndex == LIXO) {
        //    montadora.setLixo(aValue.toString());
        //}
        
        /*switch (columnIndex) {
         case NOME:
         montadora.setMarca(aValue.toString());
         case TELEFONE:
         montadora.setTel(aValue.toString());
         case SERVICE:
         montadora.setService(aValue.toString());
         case USUARIO:
         montadora.setUsuario(aValue.toString());
         case SENHA:
         montadora.setSenha(aValue.toString());
         case ID:
         //montadora.setId(aValue.toString());
         case LIXO:
         //montadora.setLixo(aValue.toString());

         }*/
        throw new IllegalArgumentException("Coluna Inválida");

    }

    public Class<?> getColumnClass(int columnIndex) {
        //Qual a classe das nossas colunas? Como estamos exibindo texto, é string.  
        /*switch (columnIndex) {
            case 5:
                return Integer.class;
            case 6:
                return Short.class;
        }*/
        return String.class;
    }

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        //Indicamos se a célula da rowIndex e da columnIndex é editável. Nossa tabela toda é.  
        return true;
    }

    //Já que esse tableModel é de livros, vamos fazer um get que retorne um livro inteiro.  
    //Isso elimina a necessidade de chamar o getValueAt() nas telas.   
    public Montadora_DB get(int row) {
        return montadora.get(row);
    }
}

Vai a lista de Montadora_DB que você quiser que sua tabela exiba. Por exemplo, pode ser resultado de uma das NamedQueries que você tem aí:

Query query = session.getNamedQuery("Montadora_DB.findAll"); List&lt;Montadora_DB&gt; dados = query.list(); tblLista.setModel(new MontadoraTableModel(dados));

grato pela resposta…

to iniciando nessa linguagem…

aonde exatamente eu colocaria esse código?

quais importações eu devo usar?

eu usava muito visualbasic… hehe to lendo muita coisa sobre java mas… já quero por em pratica algumas coisas.

novamente grato por me ajudar a não usar o DefaultTableModel

seria interessante se alguem pudesse disponibilizar um codigo pronto de exemplo funcionando, mas digo completo, talvez até com tabela em derby… assim fica mais facil de entender