Java的TableModel.
谁应该将格式化的显示呈现给用户?
有官方指引吗?
JavaDocs
对getValueAt的帮助声明:
返回columnIndex和rowIndex处单元格的值。
这里没有提到格式化。它返回单元格的“值”。一个Object。
我看到了不同的实现--甚至在我工作过的产品中也是如此。我觉得没有太多的一致性。
示例
TableModel
DecimalFormat decimalFormat = new DecimalFormat("#.###");
@Override
public Object getValueAt(int row, int column) {
...
decimalFormat.format(myObjectModel.GetFoo(row).getSomeDoubleProperty());
}DefaultTableCellRenderer
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);
}
}有正反两种,取决于你使用哪种机制。我不知道有什么其他的方法可以把我的头脑从头顶上移开,但是我已经有一段时间了。
发布于 2021-03-31 14:51:23
谁应该将格式化的显示呈现给用户?
风景。JTable使用renderers来格式化/显示数据。
为了在不同的表中对数据进行一致的双倍格式化,您必须打开每个表模型并更改getValueAt。
数据不应改变。因此getValueAt(.)方法不应更改。
呈现器可以由多个表共享。
您甚至可以通过重写一个getColumnClass(...)的JTable方法来改变数据显示到表的方式。
该表为Boolean.class、Number.class、Icon.class等提供了一些默认呈现器。
因此,例如,如果在模型中存储了Integer值,并且覆盖表的getColumnClass(...)方法以返回:
Integer.class -数据将被格式化为一个数字,并显示为对齐。Object.cloass -数据将被视为字符串,并显示左对齐。或者您甚至可以将自定义呈现器分配给TableColumnModel中的特定列。因此,如果您希望将Integer格式化为“百分比”,则可以使用渲染器。
因此,当正确的渲染器被使用时,底线是相同的数据可以以无限的方式显示。
查看表格格式渲染器,以获得创建可重用格式呈现器的简单方法。
https://stackoverflow.com/questions/66885216
复制相似问题