Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7593851
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 30, 20262026-05-30T21:16:23+00:00 2026-05-30T21:16:23+00:00

I have Checkbox in JTable Header, I am using Nimbus L&F and customize the

  • 0

I have Checkbox in JTable Header, I am using Nimbus L&F and customize the header background but the background of the checkbox takes the default grey background not the customize one as others column do.

Following is the CheckboxRenderer class

public class CheckBoxHeader extends JCheckBox implements TableCellRenderer{

public CheckBoxHeader(ItemListener itemListener) {      
    addItemListener(itemListener);
    setHorizontalAlignment(SwingConstants.CENTER);
    setOpaque(true);        
}

public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {                    
        JTableHeader header = table.getTableHeader();           
        Color bg = header.getBackground();
        setBackground(new Color(bg.getRed(), bg.getGreen(), bg.getBlue()));     
    return this;
}

And in Table

TableColumn tc = getColumnModel().getColumn(0);  
tc.setCellEditor(getDefaultEditor(Boolean.class));  
tc.setCellRenderer(getDefaultRenderer(Boolean.class));      
((JComponent)getDefaultRenderer(Boolean.class)).setOpaque(true);        
tc.setHeaderRenderer(new CheckBoxHeader());

AFAIK to get the proper rendering of the header it should render with DefaultTableCellRenderer but i am not getting the way for it. Any suggestions?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-30T21:16:25+00:00Added an answer on May 30, 2026 at 9:16 pm

    I’m not so sure if it work on all LnF(testing only Windows 7, Java 1.7.0_03):

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;
    public class NimbusHeaderCheckBox {
      public JComponent makeUI() {
        Object[] columnNames = {Status.INDETERMINATE, "Integer", "String"};
        Object[][] data = {{true, 1, "b"}, {false, 9, "a"}, {true, 5, "c"}};
        DefaultTableModel model = new DefaultTableModel(data, columnNames) {
          @Override public Class<?> getColumnClass(int column) {
            return getValueAt(0, column).getClass();
          }
        };
        JTable table = new JTable(model);
        model.addTableModelListener(new HeaderCheckBoxHandler(table));
    
        TableCellRenderer r = new HeaderRenderer(table.getTableHeader(), 0);
        table.getColumnModel().getColumn(0).setHeaderRenderer(r);
        //<ins>
        TableCellRenderer leftAlign = new LeftAlignHeaderRenderer();
        table.getColumnModel().getColumn(1).setHeaderRenderer(leftAlign);
        table.getColumnModel().getColumn(2).setHeaderRenderer(leftAlign);
        //</ins>
        table.getTableHeader().setReorderingAllowed(false);
        return new JScrollPane(table);
      }
      public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
          @Override public void run() { createAndShowGUI(); }
        });
      }
      public static void createAndShowGUI() {
        try {
          //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
          for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels())
            if ("Nimbus".equals(laf.getName())) UIManager.setLookAndFeel(laf.getClassName());
        } catch(Exception e) {
          e.printStackTrace();
        }
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.getContentPane().add(new NimbusHeaderCheckBox().makeUI());
        frame.setSize(320, 240);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
      }
    }
    class HeaderRenderer extends JCheckBox implements TableCellRenderer {
      public HeaderRenderer(JTableHeader header, final int targetColumnIndex) {
        super((String)null);
        setOpaque(false);
        setFont(header.getFont());
        header.addMouseListener(new MouseAdapter() {
          @Override public void mouseClicked(MouseEvent e) {
            JTableHeader header = (JTableHeader)e.getSource();
            JTable table = header.getTable();
            TableColumnModel columnModel = table.getColumnModel();
            int vci = columnModel.getColumnIndexAtX(e.getX());
            int mci = table.convertColumnIndexToModel(vci);
            if(mci == targetColumnIndex) {
              TableColumn column = columnModel.getColumn(vci);
              Object v = column.getHeaderValue();
              boolean b = Status.DESELECTED.equals(v)?true:false;
              TableModel m = table.getModel();
              for(int i=0; i<m.getRowCount(); i++) m.setValueAt(b, i, mci);
              column.setHeaderValue(b?Status.SELECTED:Status.DESELECTED);
            }
          }
        });
      }
      @Override public Component getTableCellRendererComponent(
          JTable tbl, Object val, boolean isS, boolean hasF, int row, int col) {
        if(val instanceof Status) {
          switch((Status)val) {
          case SELECTED:
            setSelected(true); setEnabled(true); break;
          case DESELECTED:
            setSelected(false); setEnabled(true); break;
          case INDETERMINATE:
            setSelected(true); setEnabled(false); break;
          }
        } else {
          setSelected(true); setEnabled(false);
        }
        TableCellRenderer r = tbl.getTableHeader().getDefaultRenderer();
        JLabel l=(JLabel)r.getTableCellRendererComponent(tbl, null, isS, hasF, row, col);
    
        l.setIcon(new CheckBoxIcon(this));
        l.setText(null); //XXX Nimbus LnF ???
        ////This block has no effect at all as all the columns are center aligned
        ////(pointed out by rcnpl)
        //if(tbl.convertColumnIndexToModel(col)==0) {
        //  l.setHorizontalAlignment(SwingConstants.CENTER);
        //} else {
        //  l.setHorizontalAlignment(SwingConstants.LEFT);
        //}
        //<ins>
        l.setHorizontalAlignment(SwingConstants.CENTER);
        //</ins>
        return l;
      }
    }
    //<ins>
    class LeftAlignHeaderRenderer implements TableCellRenderer {
      @Override public Component getTableCellRendererComponent(
        JTable t, Object v, boolean isS, boolean hasF, int row, int col) {
        TableCellRenderer r = t.getTableHeader().getDefaultRenderer();
        JLabel l=(JLabel)r.getTableCellRendererComponent(t, v, isS, hasF, row, col);
        l.setHorizontalAlignment(SwingConstants.LEFT);
        return l;
      }
    }
    //</ins>
    enum Status { SELECTED, DESELECTED, INDETERMINATE }
    class CheckBoxIcon implements Icon {
      private final JCheckBox check;
      public CheckBoxIcon(JCheckBox check) {
        this.check = check;
      }
      @Override public int getIconWidth() {
        return check.getPreferredSize().width;
      }
      @Override public int getIconHeight() {
        return check.getPreferredSize().height;
      }
      @Override public void paintIcon(Component c, Graphics g, int x, int y) {
        SwingUtilities.paintComponent(
            g, check, (Container)c, x, y, getIconWidth(), getIconHeight());
      }
    }
    class HeaderCheckBoxHandler implements TableModelListener {
      private final JTable table;
      public HeaderCheckBoxHandler(JTable table) {
        this.table = table;
      }
      @Override public void tableChanged(TableModelEvent e) {
        if(e.getType()==TableModelEvent.UPDATE && e.getColumn()==0) {
          int mci = 0;
          int vci = table.convertColumnIndexToView(mci);
          TableColumn column = table.getColumnModel().getColumn(vci);
          Object title = column.getHeaderValue();
          if(!Status.INDETERMINATE.equals(title)) {
            column.setHeaderValue(Status.INDETERMINATE);
          } else {
            int selected = 0, deselected = 0;
            TableModel m = table.getModel();
            for(int i=0; i<m.getRowCount(); i++) {
              if(Boolean.TRUE.equals(m.getValueAt(i, mci))) {
                selected++;
              } else {
                deselected++;
              }
            }
            if(selected==0) {
              column.setHeaderValue(Status.DESELECTED);
            } else if(deselected==0) {
              column.setHeaderValue(Status.SELECTED);
            } else {
              return;
            }
          }
          table.getTableHeader().repaint();
        }
      }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have to copy the text from one text box to another using checkbox
I have a checkbox group which works fine when you tick one but it
I have a CheckBox in my application that is using the TriState mode. The
I have a checkbox which in some cases may be disabled and checked using
I have a custom TableCellRenderer (ValueRenderer) for a JTable, the cell is a Checkbox
Without using listactivity, in a simple activity how can I have checkbox at the
I have a JTable where the first column in each row is a checkbox.
I have a JTable with four columns, the first one containing either a number
I have a checkbox node tree using java Swing. My objective is to select
I have a Jtable with a checkbox in first column. I want to strikethrough

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.