Java Swing jtable单元格编辑器将E编号加倍

时间:2010-04-06 12:50:22

标签: swing editor jtable double cell

嗨我在JTable中遇到编辑问题。

我有一个列显示数据为26,687,489,800.00即:Double。

当用户点击单元格编辑数据时,它显示为-2.66874908E10。

我希望数据在显示时显示,即:26,687,489,800.00 - 没有E10等......

任何帮助都将不胜感激。

麦克

3 个答案:

答案 0 :(得分:2)

在设置编辑器时,您应该使用DecimalFormat实例来正确设置值的格式。

答案 1 :(得分:2)

用作编辑器的组件与用于显示数据的组件(渲染器)完全不同。这就是为什么你们两者之间的格式不同。

我建议您阅读此part of the Java tutorial,了解如何添加自己的单元格编辑器。您应该添加Formatted text fieldput 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));