2017-04-27 114 views
0

我有28列,金额是他们中的一个和一个总按钮。所以当我按下总按钮想要显示最后一行的金额栏的总和。我用DefaultTableModel,并要显示的金额低于和等于columnonly 我想这个代码 -JTable列值和总和显示在最后一行的总和

totalbtn.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent ae) 
     { 
      Object source = ae.getSource(); 

      if (source == totalbtn) 
      { 
       double total = 0.0; 
       model.addRow(new Object[]{"","" ,new Integer(1), "", new Double(0.0),new Double(0.0),new Double(0.0),"",new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0),new Double(0.0)}); 
       for(int i = 0; i < model.getRowCount()-1 ; i++) 
       { 
        double Amount = (double) model.getValueAt(i, 5); 
        total = Amount+total; 

       }  
        model.setValueAt(total,model.getRowCount()-1,5); 
       //  model.setValueAt(total,i,5); 
        System.out.println("total is"+total); 







      } 
     } 


    }); 
+1

首先,问题是什么?对于8列数组,这是一个很长的数组,你确定吗? PS:'if(source == total)'对我来说很奇怪,因为你以后有'double total'。你应该将它重新命名为'totalBtn'以便更容易理解 – AxelH

+0

还要修正缩进,当前的缩进。 – Berger

+0

我修好了。我如何实现解决方案? – Vsal

回答

1
for(int i = 0; i < model.getRowCount(); i++){ 
    double total = 0; //#########3 
    double Amount = (double) model.getValueAt(i, 5); 
    total = Amount+total; 
    model.setValueAt(total,i,5); 
    System.out.println("total is"+total); 
}   

你可以看到你在声明后的总价值为每一行。所以你会擦除它并以新行中的最后一个值结束。

double total = 0; 
for(int i = 0; i < model.getRowCount(); i++){ 
    .. . 
} 

此外,由于添加行,你不应该看的最后一个值,因为这是一个total,你会最终有一个结果total *2。因此,改变像条件:

for(int i = 0; i < model.getRowCount() -1 ; i++){ //To skip the `total` row 

然后,因为我发现这只是现在,你需要你有计算total后设置的值。循环之后。

for(){ ... } 
model.setValueAt(total,model.getRowCount() - 1 ,5); 
+0

谢谢你,但它不工作...在最后一行我得到0,在这里我粘贴我的新代码 – Vsal

+0

@Val我的不好,没有写我所有的一切心里。与声明相同,您正在设置循环中的值(对于每个值),不需要该值。只需在循环中计算'total',然后在循环中设置最后一行的值。 – AxelH

+0

@AxelH ...它不工作在这里,我把第2行的第一行数量列,然后4第二行,所以我得到2第三行....无法识别问题,在这里我贴我的新代码 – Vsal