Проблемы с моделью таблицы по умолчанию

Я создаю редактируемую таблицу 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);

Чтение из txt:

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?

Спасибо за ответы.


person Vilhis    schedule 01.05.2015    source источник
comment
Какое сообщение об ошибке отображается в консоли. Я думаю, что проблема в parseInt. Вы использовали split и readLine(), но вы не можете быть уверены, что в Smth нет специальных символов. попробуйте сначала удалить \n и обрезать().   -  person    schedule 01.05.2015
comment
Нет сообщений об ошибках. Просто OK3 переопределяет событие. Я имею в виду, что он перестает вычислять сумму, если использовался OK2.   -  person Vilhis    schedule 01.05.2015
comment
Вы используете их одновременно? Я думаю об ошибке в tablemodel.getRowCount()   -  person    schedule 01.05.2015
comment
Нет, только что проверил. У меня есть 2 других действия для удаления и добавления строк. После чтения из текстового файла › удалил все строки › ​​и добавил все новые строки. Таким образом, все данные таблицы были очищены, и они по-прежнему не вычисляют сумму, а только 3 первых строки.   -  person Vilhis    schedule 01.05.2015
comment
См. stackoverflow.com/questions/ 23626951/   -  person    schedule 01.05.2015


Ответы (1)


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

person Community    schedule 01.05.2015
comment
Юп, кажется, это была проблема. Спасибо! - person Vilhis; 01.05.2015