jTable Spalte summieren

  • Themenstarter Themenstarter blue1234
  • Beginndatum Beginndatum
B

blue1234

Gast
Ich bin neun hier im Forum und hoffe auf eure Hilfe. Ich habe alles durchsucht, doch bisher keine Lösungsmöglichkeit für mein Problem gefunden. Ich bin absoluter Java Anfänger. Es handelt sich um ein Programm zur Onlinebestellung. Nach der Auswahl eines Produktes soll dieses in den Warenkorb übernommen werden. In den Warenkorb dürfen maximal 2 Artikel enthalten sein. Soweit läuft das Programm unproblematisch. Nun soll am Ende noch ein Gesamtbetrag in einem Textfeld ausgewiesen werden (Summe der Spalte Betrag)
1588338158366.png

Ich habe bereits vieles ausprobiert.Da ist mein momentaner Code. Er weist mir in dem Textfeld leider gar keinen Wert aus.



public void btHinzu_ActionPerformed(ActionEvent evt) {
double [] preis={12.56,5.83,4.29};

int menge= Integer.parseInt(txtMenge.getText());

double betrag= menge * preis[cbProdukt.getSelectedIndex()];



if(i>2) {
JOptionPane.showMessageDialog(null,"Sie sind nicht berechtigt mehr als zwei unterschiedliche Produkte zu kaufen!");
}
else
{
tabelle.setValueAt(i, i-1,0);
tabelle.setValueAt(cbProdukt.getSelectedItem(), i-1,1);
tabelle.setValueAt(preis[cbProdukt.getSelectedIndex()],i-1,2);
tabelle.setValueAt(menge, i-1,3);


betrag=Math.round(betrag*100.0)/100.0;
tabelle.setValueAt(betrag+" EUR", i-1,4);

i++;

double summe = (double)tabelle.getValueAt(0,4) + (double)tabelle.getValueAt(1,4);
txtSumme.setText(""+summe);


}


} // end of btHinzu_ActionPerformed
 
Bitte immer in Code-Tags posten.
Java:
public void btHinzu_ActionPerformed(ActionEvent evt) {
    double [] preis = {12.56, 5.83, 4.29};
    int menge = Integer.parseInt(txtMenge.getText());
    double betrag = menge * preis[cbProdukt.getSelectedIndex()];

    if(i > 2) {
        JOptionPane.showMessageDialog(null, "Sie sind nicht berechtigt mehr als zwei unterschiedliche Produkte zu kaufen!");
    }
    else
    {
        tabelle.setValueAt(i, i - 1, 0);
        tabelle.setValueAt(cbProdukt.getSelectedItem(), i - 1, 1);
        tabelle.setValueAt(preis[cbProdukt.getSelectedIndex()], i - 1, 2);
        tabelle.setValueAt(menge, i - 1, 3);

        betrag = Math.round(betrag * 100.0) / 100.0;
        tabelle.setValueAt(betrag + " EUR", i - 1, 4);

        i++;

        double summe = (double) tabelle.getValueAt(0, 4) + (double) tabelle.getValueAt(1, 4);
        txtSumme.setText("" + summe);
    }
} // end of btHinzu_ActionPerformed
 
Eine JTable ist lediglich eine tabellarische Sicht auf "Daten" zum Zwecke der Darstellung. Wenn Du rechnen willst, dann mit den Daten selbst, nicht mit den Werten aus der JTable. Hättest Du z. B. ein Warenkorb-Objekt, dann wäre es nicht ungeschickt, wenn dieses die Gesamtsumme berechnen würde.
 
Kann ich es auch mit einer Methode mit Rückgabewert lösen?
Ich habe mal damit begonnen, er weist aber beim Ausführen keinen Wert bei Summe aus. Das Feld bleibt leer.

So sieht mein aktueller Code aus: Was muss ich ergänzen/verändern?

Java:
public double getSumme() {
      double summe=0; 
      
    for (int i=0;i<tabelle.getRowCount() ;i++ ) {
      summe = summe + Double.parseDouble(tabelle.getValueAt(i,4).toString());
    } // end of for
    return summe;
    }
  
  
  
  public void btHinzu_ActionPerformed(ActionEvent evt) {
    int menge= Integer.parseInt(txtMenge.getText());
    double betrag= menge * preis[cbProdukt.getSelectedIndex()]; 
    
    if(i>2) {
      JOptionPane.showMessageDialog(null,"Sie sind nicht berechtigt mehr als zwei unterschiedliche Produkte zu kaufen!");
    } 
    else
    {
      tabelle.setValueAt(i, i-1,0);
      tabelle.setValueAt(cbProdukt.getSelectedItem(), i-1,1); 
      tabelle.setValueAt(preis[cbProdukt.getSelectedIndex()],i-1,2);
      tabelle.setValueAt(menge, i-1,3);
      
      
      betrag=Math.round(betrag*100.0)/100.0;
      tabelle.setValueAt(betrag+" EUR", i-1,4);
      
      i++;   
      
      
    }
    
     txtSumme.setText(""+getSumme() );
    
  } // end of btHinzu_ActionPerformed
 
Das Feld bleibt leer, weil Du die Daten der Tabelle entnimmst. In der Tabelle steht aber keine Zahl, sondern lediglich eine Darstellung dieser Zahl in Form eines Strings inkl. Währung: "15 EUR".

Wo ist denn Deine Warenkorb-Klasse?
 
Eine Klasse Warenkorb gibt es bei mir noch nicht, dafür muss ich mich noch etwas einlesen, wie dies funktionieren würde 🤔

Mit ist aber noch aufgefallen, dass das Programm immerhin eine Summe auswirft, wenn ich EUR hinter dem Betrag herausnehmen. Allerdings wirft er dann nur eine Summe aus, wenn beide Zeilen der Tabelle beschrieben sind, bei der Aufnahme des erste Artikels bleibt das Feld leer?!
 

Zurück
Oben