JTable - zu wenig Daten

Myar

Mitglied
Hallöchen!

Hm, ich hoffe ich bekomme mein Problem verständlich erklärt... :rolleyes:

Ich habe mir ein Table Model gebsatelt, das sieht so aus:

Code:
package Programmieraufgabe;

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class MyTableModel2 extends AbstractTableModel{
	private static final long serialVersionUID = 16092;
	
	ArrayList<Parameter> paras;
	ArrayList<Parameter> VorlagenParas;
	//static int w = 0;
	//static int c = 0;

	public MyTableModel2(ArrayList<Parameter> paras, ArrayList<Parameter> VorlagenParas) {
		this.paras= paras;
		this.VorlagenParas= VorlagenParas;
    }
	
	public int getRowCount() {
		if (paras == null)
			return 0;
		else return paras.size();
	}

	public int getColumnCount() {
		return 5;
	}
	
	public String getColumnName(int columnindex){
		if(columnindex == 0)
		return "ParameterName";
		if(columnindex == 1)
		return "Wert aus Datei";
		if(columnindex == 2)
		return "ParameterName";
		if(columnindex == 3)
		return "Wert aus Vorlage";
		else
		return "Meldung";
	}
	
	public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true;
    }
	
	public Object getValueAt(int rowIndex, int columnIndex) {
		if (columnIndex == 0)
			return paras.get(rowIndex).getParameterName();
		if (columnIndex == 1)
			return paras.get(rowIndex).getParameterWert();
		if (columnIndex == 2)
			return VorlagenParas.get(rowIndex).getParameterName();
		if (columnIndex == 3)
			return VorlagenParas.get(rowIndex).getParameterWert();
		else
			return "";
	}

/*	public void setValueAt(Object eintrag, int row, int column) {
        w = row;
        c = column;
        
        switch(column){
	              
	    case 0 : one.set(row, eintrag); // Ersetz den Eintrag an der Stelle "row"
	    		break;
	    case 1 : one2.set(row, eintrag); // Ersetz den Eintrag an der Stelle "row"
	    		break;
	    case 2 : two.set(row, eintrag); // Ersetz den Eintrag an der Stelle "row"
	    		break;
	    case 3 : two2.set(row, eintrag); // Ersetz den Eintrag an der Stelle "row"
	    		break;
        }       
        		this.fireTableDataChanged();
	        }*/
}

Sodelle, wie man sieht holt sich die Tabelle die Daten für die Zellen aus zwei ArrayLists, die vorher aus zwei Dateien befüllt werden.
Die Anzahl der Zeilen bestimmt zur Zeit die Größe einer der beiden ArrayLists.
Soweit, so gut.
Wenn beide Dateien gleich groß sind (also gleichviele Zeilen haben) läuft das ja wunderbar.

Aber (und gerade das ist es, was ja das Programm prüfen soll unter Anderem) wenn eine Datei mehr Zeilen (in diesem Fall einen oder mehr Parameter) enthält, ist ja zum Beispiel die Größe von paras nicht gleich der von Vorlagenparas.
In dem Fall bekomme ich eine java.lang.IndexOutOfBoundsException, da ja die Tabelle versucht, die Zeilen in der Spalte mit Inhalt aus VorlageParas zu befüllen.

Nun stellt sich mir die Frage, wie ich dem entgegenwirke.

Angezeigt bekommen muss ich ja, dass eine Datei mehr Parameter enthält, als die andere, dass ich diese dann in der Tabelle editieren kann (zudem wird mir halt gezeigt, dass Werte nicht übereinstimmen, diese muss ich dann auch ändern).

Ich hab nun vieles versucht, aber verzweifel langsam...

Wenn ihr mehr Code braucht, sagt bescheid :)

PS: Die Methode setValueAt bitte ich zu vernachlässigen ;)

Gruß
Myar
 
Moin!
Vorrausgesetzt ich habe dich richtig verstanden, wieso überprüfst du nicht in der getValueAt() Methode ob die jeweilige Liste einen Eintrag an dem Index besitzt?!. Falls dem nicht so ist, liefere einen einen LeerString zurück.

Genauso kannst du es in der CellEditable Methode machen. Besitzt eine der Liste da keinen Eintrag, setze sie auf editierbar..

Aber wenn du nachher sowieso alles editierst, würde ich an deiner Stelle die kleinere ArrayListe mit "leeren" Objekten füllen, welche als Parameternamen/Wert eben "" zurückgeben. Dann hast du nachher auch kein Problem wenn du sie editierst..

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Hallöchen!

Tut mir leid, dass ich mich erst so spät melde.. war verhindert.
Na auf jeden Fall wollte ich nicht undankbar wirken, dein Tip war Goldwert und es hat geklappt!

Also vielen Danke dir!

Gruß
Myar
 
Zurück