2013-01-18 60 views
1

我想计算索引[0] [2]中的总值,以前的值为0,但我已经用计算结果“1/y”替换并显示它,并且当我计算合计值,即求和值是以前的值,该值包含“0”,这是我的代码,使用新值计算JTable列中的总值

 //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”的计算处理之后 column 1/y

应该怎么办,能够使用新值来加总它? 所有你给的,我希望它的帮助,谢谢

回答

5

DependentColumn所示,你可以在你执行getValueAt()计算衍生值。如果值所依赖的列是可编辑的,则一定要触发一个事件,指出相关单元格已更改。

附录:我已经添加了我的代码以getValueAt()但结果是一样的。

缺席您sscce我猜:我看到你,你用它来构建和更新DefaultTableModel后访问allData阵列。我不确定练习的目标,但是您可能不想在之前更新DefaultTableModel内部使用Vector,并且在施工完成后忽略数组。

+1

另请参阅这些[相关示例](http://stackoverflow.com/a/13628183/230513)。 – trashgod

+0

谢谢你trashgod,我已经添加了我的代码与getValueAt(),但结果是相同的 – irwansyahazniel

+0

@irwansyahazniel:我详细阐述了上面;一个类似的问题进行了审查[这里](http://stackoverflow.com/q/11223586/230513)。 – trashgod

2

您可以尝试使用EnvelopeTableMode,它包装原始模型并可以提供分组功能(SUM,COUNT,AVG ...)。

+0

昨天谢谢你的建议StanislavL,我的任务应该是明天收集,看来,没有更多的时间从头开始,谢谢你StanislavL – irwansyahazniel