Search code examples
javaswingjtablealignmentrenderer

Modify text alignment in a JTable cell


I have found a way to allocate the cell in a table, which seems to be a Component

JTable table = new JTable(...)
{
    public Component prepareRenderer(
        TableCellRenderer renderer, int row, int column)
    {
        Component c = super.prepareRenderer(renderer, row, column);

        //  add custom rendering here

        return c;
    }
};

In the code, c is the Component, but I cannot find a method in Component to modify text alignment. Anything wrong about this approach?


Solution

  • Use DefaultTableCellRenderer for that purposes, it has setHorizontalAlignment() method :

    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){
        @Override
        public Component getTableCellRendererComponent(JTable arg0,Object arg1, boolean arg2, boolean arg3, int arg4, int arg5) {
             Component tableCellRendererComponent = super.getTableCellRendererComponent(arg0, arg1, arg2, arg3, arg4, arg5);
             int align = DefaultTableCellRenderer.CENTER;
             if(condition){
                 align = DefaultTableCellRenderer.LEFT;
             }
            ((DefaultTableCellRenderer)tableCellRendererComponent).setHorizontalAlignment(align);
             return tableCellRendererComponent;
        }
    };
    t.getColumnModel().getColumn(COLUMN).setCellRenderer(renderer);
    

    COLUMN is target column, condition is condition for switching.