2015-05-01 2 views
1

Я создаю java редактируемый стол и столкнулся с проблемой: он «сбой» после чтения данных. Вот мой стол:Проблемы с моделью таблицы по умолчанию

table.getTableHeader().setReorderingAllowed(false); 
tableModel = new DefaultTableModel(new Object[] 
{"#","1","2","3","4","5","6","7"},8); 
table.setModel(tableModel); 
table.getColumnModel().getColumn(0).setMaxWidth(22); 

Чтение из ТХТ:

OK4.addActionListener(new ActionListener(){ 
    @Override 
    File f = new File(fileName); 
    if(f.exists()){ 
     try { 
      tableModel = new DefaultTableModel(new Object[]{"#","1","2","3","4","5","6","7"},0); 
      BufferedReader br = new BufferedReader(new FileReader(fileName)); 
      String line = br.readLine(); 
      String[] colHeaders = line.split("\\s+"); 
      tableModel.setColumnIdentifiers(colHeaders); 
      while ((line = br.readLine()) != null) { 
       String[] data = line.split("\\s+"); 
       tableModel.addRow(data); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    }else{ 
     JOptionPane.showMessageDialog(null, "this day is not saved"); 
    }; 
    table.setModel(tableModel); 
    table.getColumnModel().getColumn(0).setMaxWidth(22); 
}); 

И основные проблемы вызывает мое поле сумму:

OK3.addActionListener(new ActionListener(){ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     int sum=0; 
     int number; 
     Object smth; 
     String Smth; 
     int kint2 = table.getRowCount()-1; 
     if(table.getValueAt(kint2, 1)=="total:"){ 

     }else{ 
      tableModel.addRow(new Object[]{}); 
      int a = table.getRowCount()-1; 
      table.setValueAt("total:", a, 1); 
     } 
     for (int j = 2; j < 8; j++) { 
      for (int i = 0; i < table.getRowCount()-1; i++) { 
       smth = table.getValueAt(i,j); 
       Smth = (String) smth; 
       if (smth==null){ 
        number=0; 
       }else{ 
        number=Integer.parseInt(Smth); 
       } 
       sum=sum+number; 
      } 
      table.setValueAt(sum, table.getRowCount()-1, j); 
      sum=0; 
     } 
    } 
}); 

остановки приложений вычислить сумму после чтения из TXT или вычисляет только первые 4 строки суммы. Это как-то связано с моим tableModel?

Благодарим за ответы.

+0

Какое сообщение об ошибке отображается на консоли. Я думаю, проблема в parseInt. Вы использовали split и readLine(), но не можете быть уверены, что в «Smth» нет специальных символов. попробуйте сначала удалить «\ n» и trim(). – Dien

+0

Нет сообщений об ошибках. Только ОК3 переопределяет события сбоев. Я имею в виду, что он останавливает вычисление суммы, если используется OK2. – Vilhis

+0

Вы используете их одновременно? Я думаю об ошибке в tablemodel.getRowCount() – Dien

ответ

0

Проблема в том, что вы добавляете новые строки с помощью tablemodel и подсчитываете строки с таблицей. Как обсуждалось в «jTable row count VS model row count», ваша таблица не будет обновлять количество строк, поэтому всегда используйте tablemodel.getRowCount()

+0

Youp, похоже, проблема. Спасибо! – Vilhis

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