Algo estranho com coluna boolean em jtableModel

5 respostas
adsadilson

Bom dia pessoa, queria entende o pq da coluna boolean de jtableModel q eu implementei veio diferente das demais ao in vez de aparece o quadradinho esta aparecendo o nome false ou true fora isso o mais esta funcionando normal, só quero entendo o pq desse efeito, como eu falei tenho outras jtableModel funcionando com o quadradinho copie o código de uma e implementei para essa tela mas apareceu desse jeito com o nome no lugar do quadradinho
caro colegas um forte abraço

5 Respostas

JavaDreams

Olá amigo.

Olha acredito que seria melhor você ter postado seu código, pois observei
que ninguém pode responder.

Para adiantar de fato, eu fiz um exemplo simples aqui no NBeans
para ver se te ajuda.

Usei o JTable

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Tiago
 */
public class jTableModelTeste extends javax.swing.JFrame {

    /**
     * Creates new form jTableModelTeste
     */
    public jTableModelTeste() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"Joao", "1", "4", null},
                {"Maria", "2", "3", null},
                {"Rosa", "3", "2", null},
                {"Marcos", "4", "1", null}
            },
            new String [] {
                "Nome", "CPF", "Telefone", "Válido"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Boolean.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jScrollPane1.setViewportView(jTable1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(15, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(14, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(jTableModelTeste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(jTableModelTeste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(jTableModelTeste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(jTableModelTeste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new jTableModelTeste().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration
}

Saída: Ver arquivo em anexo.

Abraço


drsmachado

adsadilson:
Bom dia pessoa, queria entende o pq da coluna boolean de jtableModel q eu implementei veio diferente das demais ao in vez de aparece o quadradinho esta aparecendo o nome false ou true fora isso o mais esta funcionando normal, só quero entendo o pq desse efeito, como eu falei tenho outras jtableModel funcionando com o quadradinho copie o código de uma e implementei para essa tela mas apareceu desse jeito com o nome no lugar do quadradinho
caro colegas um forte abraço

Está usando um TableModel que estende de AbstractTableModel ou o famigerado e ruim DefaultTableModel?
O ‘quadradinho’ ao qual você se refere, seria, por acaso, um JCheckBox? Se sim, você deve adicionar mais algumas coisas ao teu código, para que ele apareça, talvez tenha faltado isso.

adsadilson

rapaz desculpe pela demora em entra em contato com vcs, infelizmente estive um bom tempo longe do fórum e só agora q vir o comentários de vcs, aqui infelizmente ainda continua com essa anomalia na tablemodel vou posta o meu código aqui para vc analisa e ver o q eu fiz de errado, blz um abraço a todos e ate mais.

package TableModel;

import Bean.ContAPagar;
import Util.Ulti;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 * Implementação de Table Model para exibir os Sócios.
 *
 * @author Eric Yuzo
 */
public class ContAPagarTableModel extends AbstractTableModel {

    private List<ContAPagar> linhas;
    private String[] colunas = new String[]{
        "Check:", "Nº. NF:", "Documento:", "Fornecedor:", "Emissão:", "Vencimento:",
        "Dias:", "Nº. Parcela", "Valor:", "Juro:", "Multa:", "Desconto:", "Vlr. Corrido:",
        "Forma Pagto:", "Pagamento:", "Vlr. Pago:", "Contra Partida:"};

    public ContAPagarTableModel() {
        linhas = new ArrayList<>();
    }

    public ContAPagarTableModel(List<ContAPagar> listaDeContAPagar) {
        linhas = new ArrayList<>(listaDeContAPagar);
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }

    @Override
    public int getRowCount() {
        return linhas.size();
    }

    @Override
    public String getColumnName(int columnIndex) {
        return colunas[columnIndex];
    }

    ;

	@Override
    public Class<?> getColumnClass(int columnIndex) {

        switch (columnIndex) {
            case 0:
               return Boolean.class;
            case 1:
                return String.class;
            case 2:
                return String.class;
            case 3:
                return String.class;
            case 4:
                return String.class;
            case 5:
                return String.class;
            case 6:
                return String.class;
            case 7:
                return String.class;
            case 8:
                return String.class;
            case 9:
                return String.class;
            case 10:
                return String.class;
            case 11:
                return String.class;
            case 12:
                return String.class;
            case 13:
                return String.class;
            case 14:
                return String.class;
            case 15:
                return String.class;
            case 16:
                return String.class;
            default:
                throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }

       @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        ContAPagar obj = linhas.get(rowIndex);

        switch (columnIndex) {
            case 0:
                return obj.isCheck();
            case 1:
                return obj.getNotaFiscal();
            case 2:
                return obj.getNumDoc();
            case 3:
                return obj.getForn().getFor_razao_social();
            case 4:
                return Ulti.dt.format(obj.getEmissao());
            case 5:
                return Ulti.dt.format(obj.getVencimento());
            case 6:
                return "Dia venc.";
            case 7:
                return obj.getN_parcela();
            case 8:
                return Ulti.dF.format(obj.getVlrParcela());
            case 9:
                if (obj.getJuros() != 0) {
                    return Ulti.dF.format(obj.getJuros());
                } else {
                    return "";
                }
            case 10:
                if (obj.getMulta() != 0) {
                    return Ulti.dF.format(obj.getMulta());
                } else {
                    return "";
                }
            case 11:
                if (obj.getDesconto() != 0) {
                    return Ulti.dF.format(obj.getDesconto());
                } else {
                    return "";
                }
            case 12:
                if (obj.getVlrCorrido() != 0) {
                    return Ulti.dF.format(obj.getVlrCorrido());
                } else {
                    return "";
                }
            case 13:
                return obj.getFormaPagto();
            case 14:
                if (obj.getPagamento() != null) {
                    return Ulti.dt.format(obj.getPagamento());
                } else {
                    return "";
                }
            case 15:
                if (obj.getVlrPago() != 0) {
                    return Ulti.dF.format(obj.getVlrPago());
                } else {
                    return "";
                }
            case 16:
                return obj.getPc().getPla_nome();
            default:
                throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }

       @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        ContAPagar obj = linhas.get(rowIndex);
         switch (columnIndex) {
            case 0:
                obj.setCheck((Boolean) aValue);
                if (obj.isCheck()) {
                    obj.setVlrSelecionado(obj.getVlrParcela());
                    obj.setCount(1);
                } else {
                    obj.setVlrSelecionado(obj.getVlrSelecionado()- obj.getVlrParcela());
                    obj.setCount(obj.getCount() - 1);
                }
            default:
                throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }

    ;

		@Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return true;
            default:
                return false;
        }
    }

       public ContAPagar getContAPagar(int indiceLinha) {
        return linhas.get(indiceLinha);
    }

    public void addContAPagar(ContAPagar obj) {
        linhas.add(obj);
        int ultimoIndice = getRowCount() - 1;
        fireTableRowsInserted(ultimoIndice, ultimoIndice);
    }

    public void removeContAPagar(int indiceLinha) {
        linhas.remove(indiceLinha);
        fireTableRowsDeleted(indiceLinha, indiceLinha);
    }

    public void addListaDeContAPagar(List<ContAPagar> obj) {
        int tamanhoAntigo = getRowCount();
        linhas.addAll(obj);
        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
    }

    public void limpar() {
        linhas.clear();
        fireTableDataChanged();
    }

    public boolean isEmpty() {
        return linhas.isEmpty();
    }

    public List<ContAPagar> getLinhas() {
        return linhas;
    }
}
adsadilson

olha como ta ficando a coluna Check esta mostrando o nome false no lugar de retângulo

adsadilson

Caros amigos descobri o motivo dele esta agindo assim, devido uma configuração q estava fazendo para alinha o conteúdo dentro do TableModel.
estava usando esse código abaixo para centralizar o conteúdo da coluna Check só hoje fazendo vários teste vir q não é necessário centralizar essa coluna erro bobo de programação q as vez tira agente do serio rsrsrs. Mais mesmo assim muito obrigado pela colaboração de vcs, fica um abraço e ate mais. Há agora vou precisa implementa um jButton onde o usuário pode marca todos os registro ou então desmarca alguém ai tem uma ideia como fazer essa implementação.

jTableContAPagar.getColumnModel().getColumn(0).setCellRenderer(center)

Criado 5 de agosto de 2013
Ultima resposta 4 de jun. de 2014
Respostas 5
Participantes 3