Question

I have a boolean column in JTable, so i each cell there is a checkbox. When i try to set a cell renderer in order to change the background color the checkbox from cell replaced by values (true, false).. What's goin wrong!!

My cell renderer:

class BackgroundTableCellRenderer extends DefaultTableCellRenderer {

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int col) {

        Component c = super.getTableCellRendererComponent(table, value,
                isSelected, hasFocus, row, col); 
        if(row%2 == 0)
        {
            Color bColor = Color.decode("#EFF2ED");
            c.setBackground(bColor);  
        }
        else
            c.setBackground(Color.white);

        return c;
    }
}

I set the renderer like that:

data_table.setDefaultRenderer(Boolean.class, new BackgroundTableCellRenderer());
Was it helpful?

Solution

  • use prepareRenderer for line decorating

  • or for (Xxx)TableCellRenderer you can to try with

.

   class BooleanRenderer extends JCheckBox implements TableCellRenderer, UIResource {

        private static final long serialVersionUID = 1L;
        private final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);

        BooleanRenderer() {
            super();
            setHorizontalAlignment(JLabel.CENTER);
            setBorderPainted(true);
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            if (isSelected) {
                setForeground(table.getSelectionForeground());
                super.setBackground(table.getSelectionBackground());
            } else {
                setForeground(table.getForeground());
                setBackground(table.getBackground());
            }
            setSelected(value != null && ((Boolean) value).booleanValue());
            if (hasFocus) {
                setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
            } else {
                setBorder(noFocusBorder);
            }
            return this;
        }
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top