Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben.

Philipp1904

Mitglied
Hallo,

ich würde gerne alle Zeilen aus einer Spalte (diese beinhaltet Integer) , zusammen zählen und dann in eine eigene Zeile das Ergebnis schreiben .Das würde ich gerne unter jeder Spalte machen.


EDIT : So sollte die Table am Ende aussehen ImageShack® - Online Photo and Video Hosting, wie man sieht ganz unten stehen die Summen der Spalten.


Bis jetzt sieht mein Quell-Code so aus :

Java:
public class TestTableModel extends AbstractTableModel {
private Integer [][]data = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16},{0,0,0,0}};
 // Die {0,0,0,0} sind dafür da dass ich dort dann die Summen reinschreiben kann.

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if(rowIndex <4 ){
            return true;
        }
        else{
            return false;
        }
    }
    

    @Override
    public int getRowCount() {
       return data.length;
    }

    @Override
    public int getColumnCount() {
        return 4;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
            return data[rowIndex][columnIndex];
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        data[rowIndex][columnIndex] = Integer.parseInt((String)aValue);
       System.out.println("Der Wert wurde zu "+ aValue.toString() +" verändert");
    }
   
}

Das wichtige ist aber auch dass wenn der Wert einer Zeile verändert wird dass dann auch automatisch das Ergebnis in der Zeile ganz unten stimmt.

Ich freue mich über jede Hilfe .

LG
 
Zuletzt bearbeitet:
ich würd bei row count die länge +1 zurück geben und bei getValue überprüfen ob es die letze zeile ist und dann die summe zurück liefern.

ob dann schon automatisch beim ändern einer zelle die letze zeile auch neue berechnet wird... da bin ich mir nicht sicher, ich denke da wirst du noch eine fireTableDataChanged (oder wie die heißt) Methode aufrufen müssen...
 
Das mit der rowCount + 1 habe ich probiert jedoch gibt es dann eine ArrayIndexOutOfBoundsException in der getValueAt .

Das Hauptproblem liegt darin dass ich nicht wirklich weiß wie ich mir die Werte aus den Zeilen holen soll aus einer Spalte , diese zusammen zähle und dann richtig in die letzte Zeile schreibe.

Es sollte am Ende so aussehen :

ImageShack® - Online Photo and Video Hosting

LG
 
bekommst du eine ArrayIndexOutOfBoundsException ... ja klar...
bei getValue überprüfen ob es die letze zeile ist und dann die summe zurück liefern.
wenn dir das nicht klar ist würd ich mir nochmal überlegen was da passiert...

weiß wie ich mir die Werte aus den Zeilen holen soll aus einer Spalte , diese zusammen zähle und dann richtig in die letzte Zeile schreibe.
du weißt nicht wei du die summe einer spalte von einem zwei dimensionalne array bildest?
über die zeilen itererieren und die jeweilige spalte aufsummieren...

ich würd die werte gar nicht irgendwo hinschreiben... ich würd das immer in getValue berechnen...
 
also konkret würd ichs so machen....

Java:
@Override
	public int getRowCount() {
		return data.length + 1;
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		if (rowIndex == data.length) {
			return sumOfColumn(columnIndex);
		}
		return data[rowIndex][columnIndex];
	}

	private int sumOfColumn(int col) {
		int sum = 0;
		for (int[] row : data) {
			sum += row[col];
		}
		return sum;
	}
 
Ganz toll erklärt , nun habe ich anhand deines Codes verstanden was du gemeint hattest .Ob wir schon in der letzten Zeile der Spalte sind.Es funktioniert jetzt .

Ich danke dir :toll: !

Nun muss ich nur noch herausfinden wie ich es schaffe dass die Summe auch aktualisiert wird sobald der Wert einer Zeile verändert wurde.
 
Nun muss ich nur noch herausfinden wie ich es schaffe dass die Summe auch aktualisiert wird sobald der Wert einer Zeile verändert wurde.

füg mal in der setValueAt Methode ganz unten diese zeile ein

Java:
fireTableCellUpdated(data.length, columnIndex);

das teilt der Oberklasse AbstractTableModel mit dass sich in dieser Zelle ein Wert geändert hat...
 

Zurück
Oben