Search code examples
javaswinguser-interfacejtablejtableheader

JTable Right Align Header


Basically, I have a JTable containing columns with right-aligned cells but left-aligned headers which looks really bad. I would like to right-align the headers of these columns without altering the "Look and Feel" of the headers.

Thanks


Solution

  • Here's an alternate approach to modifying the TableCellRenderer of a table's JTableHeader. It's not strictly necessary for this usage, but it minimizes the impact on the UI delegate's appearance.

    Typical usage:

    JTable table = new JTable(…);
    JTableHeader header = table.getTableHeader();
    header.setDefaultRenderer(new HeaderRenderer(table));
    

    Custom header renderer:

    private static class HeaderRenderer implements TableCellRenderer {
    
        DefaultTableCellRenderer renderer;
    
        public HeaderRenderer(JTable table) {
            renderer = (DefaultTableCellRenderer)
                table.getTableHeader().getDefaultRenderer();
            renderer.setHorizontalAlignment(JLabel.CENTER);
        }
    
        @Override
        public Component getTableCellRendererComponent(
            JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int col) {
            return renderer.getTableCellRendererComponent(
                table, value, isSelected, hasFocus, row, col);
        }
    }