JScrollPane on JTable - Duvidas

Caros amigos,

Tenho um JScrollPane on JTable com 4 colunas.

Nome - Quantidade - Valor - Subtotal

Eu gostaria de que o campo valor nao fosse editavel e assim que eu inserir o nome do servico aparecesse o seu valor e tambem o Subtotal. Alguem tem um exemplo?

Tambem estou procurando saber ao final da inserção aparecer um botão pra excluir o serviço (seria uma 5 coluna?)
Ou implementar um botao de excluir assim que alguma linha fosse selecionada.

Quem tiver exemplo fico feliz…

Abraços !!!

Oi Marcos, tudo bem?

Então cara, é bem simples isso que você quer (:

Você tem que definir o método isCellEditable no seu TableModel, por exemplo:

table.setModel(new DefaultTableModel(){ @Override public boolean isCellEditable(int row, int column) { return false; } });

Lembrando que o método diz se uma célula é editável, então ele recebe um número da linha e da coluna da célula. Assim, da pra você fazer com que apenas uma coluna não seja editável, e assim sucessivamente, toda personalização a nível de linha, coluna ou célula (:

:wink:

O ideal mesmo é você parar de lutar com seu JTable e entender como ele funciona.

Primeiro de tudo: Não use o DefaultTableModel. A tabela funciona da seguinte forma:

  1. Existe a classe JTable, que coordena o desenho dos dados;
  2. Existe a classe TableCellRenderer, que desenha uma célula em si;
  3. Existe a classe TableModel, que é quem diz a tabela que dados devem ser desenhados;

O java inclui uma implementação padrão de TableModel, como exemplo. Já vou adiantando que ela é péssima, e constitui por si só uma péssima prática de programação. Por vários motivos:
a) Ela mistura lógica de view com a de negócio;
b) Ela dobra a quantidade de memória necessária para exibir o JTable;
c) Ela torna o código inseguro, cheio de casts, e difícil de ler;
d) É mais difícil usa-lo do que fazer seu próprio TableModel.

Fazer um TableModel é simples. Comece criando uma classe filha de AbstractTableModel. Entenda que cada método do AbstractTableModel será chamado pelo próprio JTable, quando ela estiver perguntando o que será desenhado. Pegue por exemplo o método isCellEditable, citado pelo colega. A tabela chama aquele método perguntando: “Ei TableModel, a célula da coluna column e da linha line, é editável?” E seu model retorna para ela o valor “sim” ou “não”, em resposta a pergunta.

Nesse tópico, existe uma implementação de um TableModel simples, para livros:
http://www.guj.com.br/posts/list/132698.java#714736

Dê uma lida. Note que aprender a usar o model também responde a pergunta do seu outro tópico. Uma vez que você vai separar o JTable dos dados deles em si, fica fácil reproveitar esses dados entre vários JTables de sua aplicação. :wink:

Olá, Marcos!

Só para reforçar, siga estes conselhos do Vini.

Aboli o uso do DefaultTableModel, e adotei o AbstractTableModel como padrão para desenho de minhas JTable.

Facilitou MUITO a minha vida!

Grande abraço!