我有JTable
哪个模型已扩展为AbstractTableModel
。它有4列。前两列包含字符串,最后两列包含双类型数据。当数据为空时,最后2列显示0.0;
但是当值为null或0时我想将其显示为空白;当我编辑单元格并输入任何数值时,它将设置精确点的双数据类型值。
col1 || col2 || col3 || col4
-----------------------------
aaa || a1 || 250.00||
bb || b1 || || 10.5
============================
当columnIndex为3和4时,解决方案可能是在getValueAt(int rowIndex, int columnIndex)
方法中更改并返回“”但是它会产生另一个问题。当我编辑单元格时,它返回String值,并且需要使用setValueAt(Object value, int row, int col)
Double.parseDouble(value.toString());
方法加倍
但我认为将字符串值解析为Double
并不明智或正确;我认为setCellEditor
可能是一个很好的解决方案。但是我无法理解如何将单元格编辑器设置为双数据类型。
mytable.getColumnModel().getColumn(3).setCellEditor(???);
你能给出任何解决方案。
答案 0 :(得分:3)
您需要更改CellRenderer,而不是CellEditor。
请阅读“概念:编辑和渲染器”:
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
答案 1 :(得分:0)
最后我可以使用以下代码解决我的问题。
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setHorizontalAlignment(SwingConstants.RIGHT);
if (value.equals(Double.valueOf(0))){
super.setValue("");
}
else {
DecimalFormat numberFormat = new DecimalFormat("#,##0.00;(#,##0.00)");
Number num = (Number)value;
super.setValue(numberFormat.format(num));
}
return c;
}