我找到了一些类似问题的线程,但没有任何对我有用。 我试图从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
所以,它似乎是正确的,但我仍然得到异常,它说它是一个整数,我不能把它转换为双...
我希望有人可以帮助我,抱歉我的英语不好!(不是我的第一语言)
答案 0 :(得分:0)
好吧,为了解决这个错误,你不应该将Integer
放到你明确定义为double
值的单元格中。您可以这样解决:使用String.valueOf()
从您的输入中创建String
。此方法接受许多变量类型。然后从String
开始Double.parseDouble()
。例如
double doubleValue = Double.parseDouble(String.valueOf(tableModel.getValueAt(i, 0)));
有点hackey但是有效。