我有一个JTable和一个自定义表模型,在某些地方Double.class
作为列类。我从数据库中读取,然后将结果插入表中。我希望数字以2位小数呈现,所以我使用这个类
public class NumberCellRender extends DefaultTableCellRenderer {
DecimalFormat numberFormat = new DecimalFormat("#.00");
@Override
public Component getTableCellRendererComponent(JTable jTable, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(jTable, value, isSelected, hasFocus, row, column);
if (c instanceof JLabel && value instanceof Number) {
JLabel label = (JLabel) c;
label.setHorizontalAlignment(JLabel.RIGHT);
Number num = (Number) value;
String text = numberFormat.format(num);
label.setText(text);
}
return c;
} }
问题是当我调用addRow时,Double.class列没有格式化
public void addRowData( IEntity entity ) {
getRowsData().add(entity);
fireTableDataChanged();
}
问题是,当我打电话给我时,我必须再调用一些东西来渲染表格?
答案 0 :(得分:4)
例如,覆盖getColumnClass()方法:
public Class getColumnClass(int column)
{
for (int row = 0; row < getRowCount(); row++)
{
Object o = getValueAt(row, column);
if (o != null)
{
return o.getClass();
}
}
return Object.class;
}
然后将渲染器添加到您执行的表中:
table.setDefaultRenderer(Double.class, new NumberCellRenderer());
您可能还想查看Table Format Renderers的某些通用渲染器,您可以使用:
table.setDefaultRenderer(Double.class, new NumberRenderer( new DecimalFormat("#.00") ));