嗨我在JTable中遇到编辑问题。
我有一个列显示数据为26,687,489,800.00即:Double。
当用户点击单元格编辑数据时,它显示为-2.66874908E10。
我希望数据在显示时显示,即:26,687,489,800.00 - 没有E10等......
任何帮助都将不胜感激。
麦克
答案 0 :(得分:2)
在设置编辑器时,您应该使用DecimalFormat实例来正确设置值的格式。
答案 1 :(得分:2)
用作编辑器的组件与用于显示数据的组件(渲染器)完全不同。这就是为什么你们两者之间的格式不同。
我建议您阅读此part of the Java tutorial,了解如何添加自己的单元格编辑器。您应该添加Formatted text field,put the number format you need。
示例:
DecimalFormat df = new DecimalFormat ("#,##0.######"); //you shouldn't need more "#" to the left
JFormattedTextField fmtTxtField = new JFormattedTextField(df);
TableCellEditor cellEditor = new DefaultCellEditor(fmtTxtField);
//This depends on how you manage your cell editors. This is for the whole table, not column specific
table.setCellEditor(cellEditor);
答案 2 :(得分:1)
如果我们认为您的列是Double类,则可以执行以下操作:
DecimalFormat df = new DecimalFormat ("#,##0.######");
JFormattedTextField fmtTxtField = new JFormattedTextField(df);
TableCellEditor cellEditor = new DefaultCellEditor(fmtTxtField);
table.setDefaultEditor(Double.class, new DefaultCellEditor(fmtTxtField));
但是您需要覆盖DefaultCellEditor的默认委托实现。 (至少在Java6中)
//DEFAULT IMPLEMENTATION INSIDE THE CONSTRUCTOR
....
public DefaultCellEditor(final JTextField textField) {
editorComponent = textField;
this.clickCountToStart = 2;
delegate = new EditorDelegate() {
public void setValue(Object value) {
textField.setText((value != null) ? value.toString() : "");
}
public Object getCellEditorValue() {
return textField.getText();
}
};
textField.addActionListener(delegate);
}
....
//YOUR IMPLEMENTATION
public class DoublesCellEditor extends DefaultCellEditor {
private JFormattedTextField textField;
public DoublesCellEditor(JFormattedTextField jft) {
super(jft);
this.textField = jft;
super.delegate = new EditorDelegate() {
public void setValue(Object value) {
textField.setValue(value != null ? ((Number) value).doubleValue() : value);
}
public Object getCellEditorValue() {
Object value = textField.getValue();
return value != null ? ((Number) value).doubleValue() : value;
}
};
}
}
而是使用:
table.setDefaultEditor(Double.class, new DoublesCellEditor(fmtTxtField));