JTable, Boolean e JCheckBox

10 respostas
J

Olá pessoal,
já li vários tópicos mas nenhum resolveu o meu problema.

Tenho uma tabela e uma das colunas recebe valores do tipo Boolean.
Meu DefaultTableModel já implementa o método getClass().
Para toda coluna eu seto um DefaultTableCellRenderer, responsável por alternar a cor das linhas.

O problema é que o renderer não trata o Boolean como um checkbox e sim como uma string (true, false).

alguém sabe como resolver isso?
abraços
obrigado

10 Respostas

T

Dê uma olhada e vê se te ajuda.

Qualquer coisa, poste novamente.

T

Tchaco:
Dê uma olhada e vê se te ajuda.

http://www.guj.com.br/posts/list/56963.java

Qualquer coisa, poste novamente.

J

Tchaco,
a partir do momento que eu atribuo o Renderer às células,
o campo que é Boolean passa de checkbox para (true,false).
entendeu?

T

Vou postar um pedaço do código que uso para gerar tabela com checkbox

...
private JTable jtbTabela;
private DefaultTableModel jtbTabelaModel;
...

jtbTabelaModel = new DefaultTableModel(new String[][] {}, new String[] { "Campo Boolean", "Campo String" }) {
  @Override
  public Class getColumnClass(int columnIndex) {
    switch (columnIndex) {
      case 0:
	return Boolean.class;
      default:
	return String.class;
    }
  }
};
jtbTabela = new JTable();
jtbTabela.setModel(jtbTabelaModel);
...

e para adicionar itens

jtbTabelaModel.addRow(new Object[] { new Boolean(true), "String Qualquer" });

Compare com o seu código e vê se tem algo diferente.

J
jTable.setModel(new javax.swing.table.DefaultTableModel(
                 new Object [][] {

                 },
                 new String [] {
                     "Ano", "Grupo", "Tipo","Parte"
                 }
             ) {
                 Class[] types = new Class [] {
                     java.lang.Integer.class, java.lang.String.class, java.lang.String.class, Boolean.class
                 };
                 boolean[] canEdit = new boolean [] {
                     false, false, false, false
                 };


                 public Class getColumnClass(int columnIndex) {
                     return types [columnIndex];
                 }
jTable.getColumnModel().getColumn(contColl).setCellRenderer(defaultTable);
public class DefaultTable extends DefaultTableCellRenderer
V

Seu código já começa errado em ter um DefaultTableModel.

J

Claro ViniGodoy,
detentor do conhecimento,
se não for muito incômodo, poderia me atualizar sobre a razão de ser errado utilizar um DefaultTableModel?
Obrigado!

J

Só para constar,
resolvi meu problema criando um Renderer que estende um JCheckBox.

V

julianofischer:
Claro ViniGodoy,
detentor do conhecimento,
se não for muito incômodo, poderia me atualizar sobre a razão de ser errado utilizar um DefaultTableModel?
Obrigado!

Basta seguir o link da minha assinatura:

  1. É mais difícil que escrever seu próprio TableModel;
  2. É mais lento (usa classes sincronizadas);
  3. Ocupa mais espaço em memória (duplica seus dados);
  4. Deixa o código mais confuso e difícil de manter (exige casts, por exemplo);
  5. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.

E lá você também veria links para esses artigos:
http://www.guj.com.br/posts/list/149034.java#808003
http://www.guj.com.br/posts/list/132698.java#714736

Que te ensinam o jeito certo de fazer. Da próxima vez, antes de partir para a ironia, que tal ler as letras vermelhas e garrafais da assinatura?

J

Obrigado!

Criado 22 de março de 2010
Ultima resposta 23 de mar. de 2010
Respostas 10
Participantes 3