enter image description here Hi All, I'm trying to add a checkbox in Jtable header to select and deselect all, that is working fine except that the header renderer is different that the rest of the cells. can you please help me to place the checkbox in the center of the Jtable header? another problem is the header for that column border is gone.
thanks in advance, Maan
import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
public class EditableHeaderRenderer extends JCheckBox implements TableCellRenderer
{
private JTable table = null;
private MouseEventReposter reporter = null;
private JComponent editor;
public EditableHeaderRenderer(JComponent editor)
{
this.editor = editor;
this.editor.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col)
{
if (table != null && this.table != table)
{
this.table = table;
final JTableHeader header = table.getTableHeader();
if (header != null)
{
DefaultTableCellRenderer centerRenderer = (DefaultTableCellRenderer) header.getDefaultRenderer();
centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);
header.setDefaultRenderer(centerRenderer);
table.repaint();
this.editor.setBackground(header.getTable().getBackground());
this.editor.setFont(header.getTable().getFont());
reporter = new MouseEventReposter(header, col, this.editor);
header.addMouseListener(reporter);
}
}
if (reporter != null)
reporter.setColumn(col);
return this.editor;
}
To each their own but I'm not convinced that what you are trying to do is the way to go, so... I'm just going to provide an alternative. The code below is based from code originally posted is SO by @trashgod way back in 2011. It's basically a good alternative to what you're doing.
Read the comments in the code: