在JTable列中设置右对齐

22

我正在为一个计费设施创建一个应用程序。我想让金额列右对齐显示。如何设置JTable列的右对齐?

4个回答

39
DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
table.getColumnModel().getColumn(4).setCellRenderer(rightRenderer);

7
给予正确答案一点赞,但是请注意:a)不要大声喊叫 b)请学习Java命名规范并遵循它们(你可以编辑你的答案并修复它们)。 - kleopatra
我发现它可以工作,但只有部分。1)如果您先设置列渲染器,然后再设置模型,则模型会使已设置的渲染器无效,使其变为“null”。2)我正在使用Nimbus L&F,并且新设置的渲染器将背景颜色更改为与其他单元格不一致。我可能会就此问题提出一个问题。 - WesternGun
这个解决方案很简单且有效,但请考虑来自@trashgod的解决方案,更加优雅且易于扩展,特别是如果您计划进行排序。 - user1136452

8

试试这个:

JTable tbl = new JTable(3,3) {
    DefaultTableCellRenderer renderRight = new DefaultTableCellRenderer();

    { // initializer block
        renderRight.setHorizontalAlignment(SwingConstants.RIGHT);
    }

    @Override
    public TableCellRenderer getCellRenderer (int arg0, int arg1) {
        return renderRight;
    }
};

1
我之前没有想过在匿名类中使用初始化块。这很好地解决了缺少构造函数的问题。 - PeterVermont
-1 表示短路所有对表的细粒度渲染器配置的支持(通过返回一对所有)。此外,完全没有必要进行子类化,而是根据需要使用表/列的 API 安装自定义渲染器。 - kleopatra
作为对kleopatra评论的补充,因为我正在做和op相同的事情:您仍然可以按照Emil的答案自定义渲染器以满足您的需求。 arg0是行,arg1是列,因此简单的例如if(arg1 == 0)让您将列0中的所有单元格某种方式对齐。无论如何,我正在子类化JTable以设置特定单元格的自定义颜色(使用prepareRenderer),而且令人惊讶的是它们不会冲突-除非您想要一个异常,否则请不要返回null。另外,在执行此操作之前,您不必设置列标题(就像sathya的已接受答案一样)。 - Neph

6
查看概念:编辑器和渲染器,注意“Number——由右对齐标签呈现。” 只需让TableModel返回正确的类。作为一个具体的例子,请注意Integer是一个Number,同时检查此示例getColumnClass()的实现。在这个相关的示例中,零索引colIndex返回Object.class,这是“通过显示对象的字符串值的标签进行呈现。”默认情况下,标签是左对齐的。
switch (colIndex) {
    case 0: return Object.class;
    …
}

left-aligned

相比之下,Integer.class 的显示效果是“右对齐的标签”。
switch (colIndex) {
    case 0: return Integer.class;
    …
}

right-aligned

这些是使用类字面量作为运行时类型标记的示例,讨论此处JTable的上下文中。

1
你有试过这个吗?这个不起作用。即使它起作用了,我仍然不会真正喜欢这种方法,因为你试图欺骗类认为你正在使用某个特定的对象类型,这可能会带来其他超出文本对齐之外的后果。 - searchengine27

2

+1 我有点对拼写错误的“JTable”的文章持谨慎态度,但侧边栏显示了完整的例子。 :-) - trashgod
类 RightTableCellRenderer 扩展了 DefaultTableCellRenderer 类{ protected RightTableCellRenderer() { setHorizontalAlignment(JLabel.RIGHT); }我添加了这段代码,接下来我该如何将渲染器设置到我的 JTable 列中呢?} - Arivu2020

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接