对齐JTable中单元格的值?

时间:2010-03-09 11:13:23

标签: java jtable alignment

我不知道如何在JTable中对齐单元格的值。

对于Ex,Jtable显示,        姓名薪水        Mr.X 100000.50        XXXX 234.34        YYYy 1205.50

我希望以下列格式对齐“工资”。

   Name      Salary
   Mr.X      100000.50
   XXXX         234.34
   YYYy        1205.50

如何如上所述对齐JTable

7 个答案:

答案 0 :(得分:42)

无需为此创建自定义类,只需使用默认渲染器:

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.getColumnModel().getColumn(???).setCellRenderer(rightRenderer);

或者更好的方法是在表中实际存储Double值,然后使用正确的数字渲染器,并且数字渲染器自动右对齐。然后,您可以使用Table Format Renderer自定义号码的格式。

答案 1 :(得分:9)

我们需要做一个小修正,正确的方法是 DefaultTableCellRenderer.RIGHT

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT);
tableExample.getColumn("Price").setCellRenderer( rightRenderer );

注意与camickr原始响应的区别,“Price”是列的名称,根据具体情况而变化。

答案 2 :(得分:5)

一种简单的方法是使用DefaultTableModel并覆盖方法 getColumnClass()
例如:

DefaultTableModel model = new DefaultTableModel() {
        @Override
        public Class getColumnClass(int columnIndex) {
            if (columnIndex == 0) {
                return Integer.class;
            } else {
                return String.class;
            }
        }
    };

如果你返回Integer,你的列将对齐anh如果返回String你的列将向左对齐。

答案 3 :(得分:4)

来自this forum post

创建一个扩展DefaultTableCellRenderer的类并实现getTableCellRendererComponent()方法,如:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
    JLabel renderedLabel = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    renderedLabel.setHorizontalAlignment(SwingConstant s.RIGHT);
    return renderedLabel;
}

并为相关列安装此渲染器。

现在您只需要确保每个值具有相同的小数位数,因为对于大多数字体,所有数字都具有相同的宽度。

答案 4 :(得分:3)

我有一个方法可以将表中的列与右侧对齐:

private void alignRight(JTable table, int column) {
    DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
    rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
    table.getColumnModel().getColumn(column).setCellRenderer(rightRenderer);
}

答案 5 :(得分:0)

解决方法是为每列指定自定义cell renderer。每个渲染器将以不同的方式格式化该数据(名称将左对齐,右侧小数,......)

答案 6 :(得分:0)

对于多个表,我设法做到这一点...它作为@camickr发布但我也添加了标题

    DefaultTableCellRenderer rightRenderer_c = new DefaultTableCellRenderer();
    DefaultTableCellRenderer rightRenderer_h = new DefaultTableCellRenderer();
    rightRenderer_c.setHorizontalAlignment( javax.swing.JLabel.RIGHT );

    for(JTable t : Tables){ //Tables is an ArrayList<JTable>

        //for the headers :
        rightRenderer_h = (DefaultTableCellRenderer) t.getTableHeader().getDefaultRenderer();
        rightRenderer_h.setHorizontalAlignment( javax.swing.JLabel.RIGHT );

        //for cells :
        for(int i=0; i < t.getColumnCount(); i++){
            t.getColumnModel().getColumn(i).setCellRenderer(rightRenderer_c);
        }
    }