从 jtable 中获取双精度值

Getting double values out of a jtable

我发现了一些有类似问题的线程,但对我没有任何帮助。 我正在尝试从 jtable 中获取一个双精度值和一个字符串值。 我正在使用 DefaultTableModel 并覆盖了 getCOlumnClass 方法:

private void initTable()
{
    String tableColumns[] = { language.getTranslatedPhrase(MultilanguageUtil.Amount),
            language.getTranslatedPhrase(MultilanguageUtil.Ingredient),
            language.getTranslatedPhrase(MultilanguageUtil.Unit) };

    tableModel = new DefaultTableModel(tableColumns, 0) {
        private static final long serialVersionUID = 1L;  
         @Override
        public Class<?> getColumnClass(int column) {  
                switch (column) {  
                    case 0:
                        return Double.class;
                    case 1:  
                        return String.class;
                    case 2:  
                        return Units.class; 
                    default:
                        return String.class;
                }  
       }
    };


    table = new JTable(tableModel);

我希望第一列中有双精度值,但是当我尝试使用以下值获取值时:

int rowCount = tableModel.getRowCount();

for (int i = 1; i <= rowCount - 1; i++)
{
    double doubleValue = (Double) tableModel.getValueAt(i, 0);
}

我得到这个异常:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double

我也试过这个:

Object objValue = tableModel.getValueAt(i, 0);
        double doubleValue = ((Double) objValue).doubleValue();

但我遇到了同样的异常。

当我执行

System.out.println(table.getColumnClass(0));

它说

class java.lang.Double

所以,这似乎是对的,但我仍然遇到异常,它说它是一个整数,我不能将它转换为双精度...

我希望有人能帮助我,抱歉我的英语不好!(不是我的母语)

好吧,要修复此错误,您不应将 Integer 放入您明确定义为具有 double 值的单元格中。您可以像这样解决它:使用 String.valueOf() 从您的输入中生成 String。此方法接受许多变量类型。然后从String,可以Double.parseDouble()。例如

double doubleValue = Double.parseDouble(String.valueOf(tableModel.getValueAt(i, 0)));

有点哈克,但很管用。