首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java的TableModel getValueAt责任

Java的TableModel getValueAt责任
EN

Stack Overflow用户
提问于 2021-03-31 09:39:25
回答 1查看 113关注 0票数 0

Java的TableModel.

谁应该将格式化的显示呈现给用户?

有官方指引吗?

JavaDocs

getValueAt的帮助声明:

返回columnIndex和rowIndex处单元格的值。

这里没有提到格式化。它返回单元格的“值”。一个Object

我看到了不同的实现--甚至在我工作过的产品中也是如此。我觉得没有太多的一致性。

示例

TableModel

代码语言:javascript
复制
DecimalFormat decimalFormat = new DecimalFormat("#.###");

@Override
public Object getValueAt(int row, int column) {
    ...
    decimalFormat.format(myObjectModel.GetFoo(row).getSomeDoubleProperty());
}

DefaultTableCellRenderer

代码语言:javascript
复制
public final class PositionDoubleCellRenderer extends DefaultTableCellRenderer {

    private final String formatPattern = "%,.03f";

    @Override
    public Component getTableCellRendererComponent(
            final JTable table, Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column
    ) {
        String formattedValue = "";

        if (value instanceof Double) {
            double numeric = (Double) value;

            if (ConstantsModel.isConstant(numeric)) {
                formattedValue = "";
            } else {
                formattedValue = String.format(formatPattern, numeric);
            }
        }

        return super.getTableCellRendererComponent(table, formattedValue, isSelected, hasFocus, row, column);
    }
}

有正反两种,取决于你使用哪种机制。我不知道有什么其他的方法可以把我的头脑从头顶上移开,但是我已经有一段时间了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 14:51:23

谁应该将格式化的显示呈现给用户?

风景。JTable使用renderers来格式化/显示数据。

为了在不同的表中对数据进行一致的双倍格式化,您必须打开每个表模型并更改getValueAt。

数据不应改变。因此getValueAt(.)方法不应更改。

呈现器可以由多个表共享。

您甚至可以通过重写一个getColumnClass(...)JTable方法来改变数据显示到表的方式。

该表为Boolean.class、Number.class、Icon.class等提供了一些默认呈现器。

因此,例如,如果在模型中存储了Integer值,并且覆盖表的getColumnClass(...)方法以返回:

  1. Integer.class -数据将被格式化为一个数字,并显示为对齐。
  2. Object.cloass -数据将被视为字符串,并显示左对齐。

或者您甚至可以将自定义呈现器分配给TableColumnModel中的特定列。因此,如果您希望将Integer格式化为“百分比”,则可以使用渲染器。

因此,当正确的渲染器被使用时,底线是相同的数据可以以无限的方式显示。

查看表格格式渲染器,以获得创建可重用格式呈现器的简单方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66885216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档