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

时间:2013-12-03 08:58:25

标签: java swing jtable alignment renderer

我找到了一种在表格中分配单元格的方法,这似乎是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中找不到修改文本对齐方法。这种方法有什么不对吗?

3 个答案:

答案 0 :(得分:2)

出于此目的使用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)

(J)Component没有在API

中实现此方法

有两种方式

  1. (J)Component投射到JLabel

  2. class管理的getColumnClass设置此值

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

答案 2 :(得分:0)

我要做出结论。

对于这个特定问题,我们可以把它分成两个:

  1. 分配单元格
  2. agjust its alignment
  3. 要分配单元格,我最初的方式和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的建议中,您可以将Component c转换为JLabel,但我没有这样做。