2017-04-27 2 views
0

I 28 Spalten hat, ist Betrag einer von ihnen und ein Gesamt Taste. Wenn ich also die Gesamttaste gedrückt habe, möchte ich die Summe der Betragsspalte in der letzten Zeile anzeigen. Ich benutzte DefaultTableModel und wollen unter dem Betrag columnonly ich diesen Code Summe der Betrag angezeigt werden versucht -Summe aus JTable Spaltenwerten und Summen-Anzeige in letzter Reihe

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

Erstens, Was ist die Frage? Und das ist ein langes Array für ein 8-Spalten-Array, bist du dir sicher? PS: 'if (source == total)' war für mich seltsam, da du später eine 'doppelte Summe 'hast. Sie sollten es auf 'totalBtn' umbenennen verständlicher – AxelH

+0

auch den Einzug beheben, die aktuelle frightnening ist zu sein. – Berger

+0

Ich habe es behoben. Wie erreiche ich eine Lösung dafür? – Vsal

Antwort

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); 
}   

können Sie sehen, Sie sind Ihr Gesamtwert für jede Zeile zu deklarieren. Sie löschen es also und erhalten den letzten Wert in Ihrer neuen Zeile.

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

Auch, weil Sie eine Zeile hinzufügen möchten, sollten Sie nicht den letzten Wert lesen, da dies das ist total ein, Sie würden mit einem total *2 Ergebnis enden. So die Bedingungen ändern, wie:

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

Dann, da ich dies bemerken erst jetzt, müssen Sie den Wert ein, nachdem Sie total haben zu berechnen. Nach der Schleife.

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

danke, aber es funktioniert nicht ... in letzter Reihe i 0 bekam, hier habe ich meinen neuen Code einfügen – Vsal

+0

@Vsal mein schlecht, nicht schreiben, alles, was ich hatte im Hinterkopf. Same an der Deklaration, Sie setzen den Wert in der Schleife (für jeden Wert), brauchen Sie nicht. Berechne einfach "total" in der Schleife und setze nach der Schleife den Wert der letzten Zeile. – AxelH

+0

@AxelH ... es funktioniert hier nicht, ich habe 2 in der ersten Zeile der Betragsspalte, dann 4 in der zweiten Reihe, so habe ich 2 in der dritten Reihe .... nicht in der Lage, das Problem zu erkennen, hier habe ich meinen neuen Code einfügen – Vsal

Verwandte Themen