从 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)));
有点哈克,但很管用。
我发现了一些有类似问题的线程,但对我没有任何帮助。 我正在尝试从 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)));
有点哈克,但很管用。