JTable AbstractTableModel setModel

keeepa

Mitglied
Hallo Leute,
suche schon sehr lange nach dem Fehler in meinem Quellcode. Meine JTable wird einfach nicht angezeigt. Keine Fehlermeldung vorhanden! Was mache ich falsch! Wenn ich meinen Code debugge, dann sehe ich das mein Model daten enthält. Hier die entsprechenden auszüge aus meinem Quelltext. Irgendwie habe ich die Vermutung das mit meinem setModel etwas nicht stimmt. Es waere echt nett mir jemand weiterhelfen könnte. 4 Augen sehen mehr als 2! :) Vielen Dank

Gui-Datei
Code:
        MenuAddressBook1 menu = new MenuAddressBook1(this);
        this.setJMenuBar(menu);
        table = new JTable();
        table.setVisible(true);
        this.getContentPane().add(table);

Menu-Klasse
Code:
	public void fileChooserAufruf(){
		String dateiPlusPfad;
		VectorAddressBook1 vector = new VectorAddressBook1();
		
		//Dateifenster wird erzeugt
		JFileChooser chooser = new JFileChooser();
	    chooser.showOpenDialog(mainFrame);
	    try{
		//Pfad + Dateiname
	    chooser.rescanCurrentDirectory(); 
	   	dateiName = chooser.getSelectedFile();
	   	dateiPlusPfad = dateiName.getAbsolutePath();
	   	VectorAddressBook1 meinModel = new VectorAddressBook1();
	   	Vector zeilenVector = meinModel.createCache(dateiPlusPfad);
	   	meinModel.zeilenZerlegtVectoren(zeilenVector);
	   	
	   	mainFrame.table.setModel(meinModel);
	   	
	   
	    }catch(Exception ex){
	    	
	    }
	}
AbstractTableModel
Code:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;
public class VectorAddressBook1 extends AbstractTableModel {
    Vector zweiDimVector;
    
    /* (non-Javadoc)
     * @see javax.swing.table.TableModel#getRowCount()
     */
    public int getRowCount() {
        // TODO Auto-generated method stub
        return 0;
    }
    /* (non-Javadoc)
     * @see javax.swing.table.TableModel#getColumnCount()
     */
    public int getColumnCount() {
        // TODO Auto-generated method stub
        return 0;
    }
    /* (non-Javadoc)
     * @see javax.swing.table.TableModel#getValueAt(int, int)
     */
    public Object getValueAt(int rowIndex, int columnIndex) {
        // TODO Auto-generated method stub
        return null;
    }
    public VectorAddressBook1(){
        
    }
    /**
     *<b>Beschreibung:</b>In dieser Methode wird die Datei ausgelesen und in den Vector
     *					  geschrieben.
     *@param dateiName String //Bezeichnung der Datei die ausgelesen werden soll.
     *@return Vector
     */
	public Vector createCache(String dateiName){
	    Vector cache;
		FileReader readDatei;		//Erzeugt einen FileInputStream
		BufferedReader leseInhalt; 	//Puffered den Inhalt der Datei
		String zeile;				//Enthaellt pro Schleifendurchlauf eine andere Zeile
		cache = new Vector();		//Erzeugt einen Vector
		
		try{
			readDatei = new FileReader(dateiName);
			leseInhalt = new BufferedReader(readDatei);
			
			//Schreibt Zeilen in den Vector
			while((zeile = leseInhalt.readLine()) != null){
				cache.add(zeile);
			}
		}
		catch(IOException ioe ) { 
			System.out.println("Datei wurde nicht gefunden."); 
		}
		return cache;

	}//End of createCache
    /**
     *<b>Beschreibung:</b>In dieser Methode werden die Zeilen in dem Vector zerlegt. Zudem
     *					  wird fuer jede Zeile ein neuer Vector angelegt. Diese "Zeilen -
     *					  Vectoren" werden dann alle wieder in einem Vector gespeichert.
     *@param Vector  Enthaellt saemtliche Zeilen der Datei
     *@return Vector Enthaellt Vectoren.
     */
	public void zeilenZerlegtVectoren(Vector zeilenVector){
	    zweiDimVector = new Vector();
	    for(int x = 0; x < zeilenVector.size(); x++){
	    	Vector rowVec = new Vector(); // pro Zeile einen Vector anlegen
			 
	    	// Zeile zerlegen in die Bestandteile
	    	// 1,Berthold Britta,bb@fhtw-berlin.de,2005-06-12,true

	    	java.util.StringTokenizer st = new java.util.StringTokenizer(zeilenVector.elementAt(x).toString(),",");
			String[] token = new String[5];
			int i = 0;
			while (st.hasMoreTokens()) {
				token[i] = st.nextToken();
			//	System.out.println("token: "+token[i]);
				i++;
			}	
			
			System.out.println("1");
			rowVec.addElement( Integer.valueOf(token[0]) ); // Nr
			rowVec.addElement(new String(token[1])); // Name
			rowVec.addElement(new String(token[2])); // E-Mail
			rowVec.addElement(new String(token[3])); // Datum
			rowVec.addElement( Boolean.valueOf(token[4]) ); // true/false
			System.out.println("2");
			zweiDimVector.addElement(rowVec);
			System.out.println("3");
			
	    }
	    System.out.println("4");
	    
	}

	
	
}
 
ich bin mir nicht sicher aber ich vermute es liegt daran das du die ganzen geerbten methoden von AbstractTableModel nicht wirklich implementiert hast und immer nur 0 oder null zurueckgibst, wie gesagt ich bin mir nicht sicher...
gibt es einen bestimmten grund warum du nicht DefaultTableModel benutzt? da gibt es auch die methode, setDatavector, die glaube ich genau das gleiche macht was du versuchst zu realisieren..
 
Danke erstmal für die schnelle Reaktion! Zu deiner Frage! Es soll ein AbstractListModel werden, weil bestimmte Mächte (ich nenne sie mal dunkle Mächte) es so von mir verlangen! :)
Natürlich hattest du recht! Dank deiner Antwort ist mir ein Licht aufgegangen, was das AbstractListModel betrifft. Ich glaube so langsam verstehe ich den Spaß! Danke
 
Zurück