修改JTable单元格中的文本对齐方式



我找到了一种在表中分配单元格的方法,它似乎是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;
    }
};

在代码中,c是组件,但我在Component中找不到修改文本对齐的方法。这种方法有错吗?

(J)Component没有在API 中实现此方法

有两种方式

  1. 通过将(J)Component铸造为JLabel

  2. getColumnClass 管理的class设置此值

DefaultTableCellRenderer stringRenderer = (DefaultTableCellRenderer)
     table.getDefaultRenderer(String.class);
stringRenderer.setHorizontalAlignment(SwingConstants.CENTER);

为此使用DefaultTableCellRenderer,它有setHorizontalAlignment()方法:

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为目标列,condition为切换条件。

我要做一个结论。

对于这个特定的问题,我们可以将其分为两部分:

  1. 分配单元格
  2. agjust对齐

要分配单元格,我原来的方式和alex2410的方式应该都很有用。

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;
    }
};

另一个

DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){
    @Override
    public Component getTableCellRendererComponent(
             JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
         Component c = super.getTableCellRendererComponent(arg0, arg1, arg2, arg3, arg4, arg5);
         //  add custom rendering here
         return c;
    }
};
t.getColumnModel().getColumn(COLUMN).setCellRenderer(renderer);

对于对齐,我发现唯一有用的方法是:

((DefaultTableCellRenderer)c).setHorizontalAlignment(SwingConstants.center);

在mKorbel的建议中,您可以将Componentc强制转换为JLabel,但我没有做到。

最新更新