Вычисление общего значения в столбце JTable с использованием нового значения

Я хочу вычислить итоговое значение в индексе [0][2], предыдущее значение равно 0, но я заменил и отобразил его с результатом вычисления "1/y", а когда я вычисляю общее значение, суммируемое значение является предыдущим значением что содержит "0", это мой код,

     //observation table
                                     //0             1        2    3      4      5     6                       
     titleColumn = new Object[]{"Time (Second)","Medicine", "1/y","x2", "X/Y", "Y^", "Error"};
                               //0   1    2   3   4   5   6
    allData = new Double[][]  {{1.0,1.02,0.0,0.0,0.0,0.0,0.0},
                               {2.0,0.667,0.0,0.0,0.0,0.0,0.0},
                               {3.0,0.367,0.0,0.0,0.0,0.0,0.0},
                               {4.0,0.278,0.0,0.0,0.0,0.0,0.0},
                               {5.0,0.237,0.0,0.0,0.0,0.0,0.0},
                               {6.0,0.187,0.0,0.0,0.0,0.0,0.0},
                               {7.0,0.155,0.0,0.0,0.0,0.0,0.0},
                               {8.0,0.156,0.0,0.0,0.0,0.0,0.0},
                               {9.0,0.142,0.0,0.0,0.0,0.0,0.0},
                               {10.0,0.111,0.0,0.0,0.0,0.0,0.0},
                               {11.0,0.12,0.0,0.0,0.0,0.0,0.0},
                               {12.0,0.097,0.0,0.0,0.0,0.0,0.0},
                               {13.0,0.099,0.0,0.0,0.0,0.0,0.0},
                               {14.0,0.089,0.0,0.0,0.0,0.0,0.0},
                               {15.0,0.079,0.0,0.0,0.0,0.0,0.0},
                               {0.0,0.0,0.0,0.0,0.0,0.0,0.0}};

    tableModelObservation = new DefaultTableModel(allData, titleColumn);
    tableObservation.setModel(tableModelObservation);
    int row,column,inputRow,inputColumn;

    //index [0][2] was replaced with calculation 1/y
    row = 0;
    column = 1;
    inputRow = 0;
    inputColumn = 2;
    double onePerY = 0;
    for(int a=0;a<allData.length;a++){
        onePerY = 1/allData[row][column];
        //is this the way to use getValueAt() and for indicating that the dependent cell has been change ?
        tableObservation.getModel().getValueAt(row, column);
        tableObservation.firePropertyChange("1/y", inputRow, inputColumn);
        tableObservation.getModel().setValueAt(onePerY, inputRow, inputColumn);  
        inputRow++;
        row++;
    }    

    //calculation total 1/y, summing is still using previous value "0"
    row = 0;
    column = 2;
    inputRow = 15;
    inputColumn = 2;
    double totalOnePerY = 0;
    for (int a=0;a<allData.length;a++){
        totalOnePerY += allData[row][column];
        row++;
    }
    //displaying result in row index[15] and column index[2] 
    tableObservation.getModel().setValueAt(totalOnePerY, inputRow, inputColumn);

значения этого столбца "1/y" после процесса расчетастолбец 1 / год

Что я должен сделать, чтобы иметь возможность суммировать его с использованием нового значения? вся помощь, которую вы оказали, я был бы признателен, спасибо

2 ответа

Решение

Как показано в DependentColumn, вы можете рассчитать производные значения в вашей реализации getValueAt(), Если столбец, от которого зависит значение, является редактируемым, обязательно запустите событие, указывающее, что зависимая ячейка изменилась.

Приложение: я добавил свой код с getValueAt(), но результат тот же.

Я думаю, что при отсутствии вашей информации вы получаете доступ к allData массив после того, как вы используете его для создания и обновления DefaultTableModel, Я не уверен насчет цели упражнения, но вы, вероятно, не захотите обновлять массив, прежде чем делать это. DefaultTableModel использования Vector внутренне, и он игнорирует массив после завершения строительства.

Вы можете попробовать использовать EnvelopeTableMode которая оборачивает оригинальную модель и может обеспечить функции группировки (SUM, COUNT, AVG...).

Другие вопросы по тегам