问题描述
我有一个JTable,其中的一列包含整数值,该整数值被格式化为添加千位分隔符。
我可以使用model.getValueAt()
或table.getValueAt()
来获取列的值,但是这些值没有格式。如何获取带有格式的单元格值?
用于格式化单元格的代码:
table.getColumnModel().getColumn(5).setCellRenderer(new NumberTableCellRenderer());
处理单元格格式的类的代码:
public static class NumberTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column) {
if (value instanceof Number) {
value = NumberFormat.getNumberInstance().format(value);
}
return super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
}
}
解决方法
如何获取带有格式的单元格值?
您将需要重新应用渲染逻辑。像这样:
TableCellRenderer renderer = table.getCellRenderer(row,column);
Component c = table.prepareRenderer(renderer,row,column);
if (c instanceof JLabel)
{
JLabel label = (JLabel)c;
String formatted = label.getText();
}
但是,这只会为您获取String值。因为String不包含这样的信息,所以它将不会获得任何颜色渲染。