JCheckBox como coluna

Este exemplo baseia-se no Exemplo com AbstractTableModel

Voltemos ao objeto Cliente, ele possui uma coluna do tipo TemCarro, que é um string sim e não.

Se quisermos que apareça com um checkbox é até bem simples. As colunas de JTables aceitam um TableCellRenderer, que nada mais é que um objeto usado para "renderizar" o que aparece ao usuário.

Assim, criamos o objeto CheckBoxRenderer que herda de JCheckBox, apenas implementando o método getTableRedererComponent da interface TableCellRenderer

CheckBoxRenderer

import java.awt.Component;

import javax.swing.JCheckBox;

import javax.swing.JLabel;

import javax.swing.JTable;

import javax.swing.table.TableCellRenderer;

 

class CheckBoxRenderer extends JCheckBox implements TableCellRenderer { 

 

   CheckBoxRenderer() {

     setHorizontalAlignment(JLabel.CENTER);

   }

   

   public Component getTableCellRendererComponent(JTable table, Object value,

                          boolean isSelected, boolean hasFocus,

                           int row, int column) {

     if (isSelected) {

       setForeground(table.getSelectionForeground());

       setBackground(table.getSelectionBackground());

       //setBackground(Color.YELLOW);   // foco em amarelo - use este

     } else {

       setForeground(table.getForeground());

       setBackground(table.getBackground());

       //setBackground(row%2==0?new Color(225, 225, 225):Color.WHITE); -- para zebrar use essa

     }

     setSelected(value.equals("Sim")); // != null && ((Boolean)value).booleanValue())); -- para usar true/false

     return this;

   }

}

 

Principal

 

Para associar a coluna com o objeto de render, use esta linha

table.getColumnModel().getColumn(modelo.COL_TEMCARRO).setCellRenderer((TableCellRenderer) new CheckBoxRenderer());

 

ou de uma maneira mais simples (faz a mesma coisa)

TableColumn coluna = table.getColumnModel().getColumn(modelo.COL_TEMCARRO);

coluna.setCellRenderer((TableCellRenderer) new CheckBoxRenderer());

 

Tela

 

O resultado:

Veja também

Alinhar colunas à direita