2015-07-28 3 views
0

Я нашел несколько потоков с аналогичной проблемой, но ничего не работало для меня. Я пытаюсь получить двойное и строковое значение из jtable. Я использую DefaultTableModel и не перегрузить метод getCOlumnClass:Получение двойных значений из jtable

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); 
} 

I получаю это исключение:

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

Ну, чтобы исправить ошибку, вы не должны помещать Integer s в ячейку, которую явным образом определил, чтобы иметь значения double. Вы можете обойти это следующим образом: используйте String.valueOf(), чтобы сделать String с вашего ввода. Этот метод принимает множество переменных типов. Затем от String вы можете Double.parseDouble(). Например

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

Немного хакей, но работает.

+0

спасибо! Когда я уверен, что значения в ячейках фактически являются двойными значениями, это работает без проблем: 'double doubleValue = (double) tableModel.getValueAt (i, 0);' Ваше решение работает хорошо, но я думаю, что я должен убедиться, что в ячейках фактически есть двойные значения. – Julian

Смежные вопросы