从jtable

时间:2015-07-28 18:15:05

标签: java swing casting jtable

我找到了一些类似问题的线程,但没有任何对我有用。 我试图从jtable中获取double和string值。 我正在使用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);

我期待第一列中的值为double,但是当我尝试使用以下值获取值时:

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

所以,它似乎是正确的,但我仍然得到异常,它说它是一个整数,我不能把它转换为双...

我希望有人可以帮助我,抱歉我的英语不好!(不是我的第一语言)

1 个答案:

答案 0 :(得分:0)

好吧,为了解决这个错误,你不应该将Integer放到你明确定义为double值的单元格中。您可以这样解决:使用String.valueOf()从您的输入中创建String。此方法接受许多变量类型。然后从String开始Double.parseDouble()。例如

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

有点hackey但是有效。