Zum Inhalt springen

TableModel


Johnny90

Empfohlene Beiträge

Servus

Ich habe mir ein eigenes TableModel programmiert:

import javax.swing.table.AbstractTableModel;


public class FahrdienstKundenTableModel extends AbstractTableModel

{

	private static final long serialVersionUID = 1L;


	FahrdienstDatenbank m_oFahrdienstDatenbank = new FahrdienstDatenbank();


	String[][] data = null;


	private String[] columnNames = {"Vorname", "Nachname", "Straße", "PLZ", "Wohnort", "Rufnummer", "Geburtstag"};

	// Anzahl der Zeilen. wird von DB ausgelesen

	int iRowCount;


	String sqlStringGetKunden = "SELECT Kunde.Vorname, Kunde.Nachname, Kunde.[Straße+Hnr], Kunde.PLZ, Kunde.Wohnort, Kunde.Rufnummer, Kunde.Geburtsdatum FROM Kunde";

	String sqlStringGetRows = "SELECT count(Kundennummer) FROM Kunde";


	public int getColumnCount() 

	{

		return 7;

	}


	public int getRowCount() 

	{

		iRowCount = m_oFahrdienstDatenbank.getRowsFromDb(sqlStringGetRows);

		return iRowCount;

	}


	public String getColumnName(int col)

	{

        return columnNames[col];

    }


	public Object getValueAt(int row, int column) 

	{

		//data array wird gefüllt mit werten aus datenbank

		data =  m_oFahrdienstDatenbank.getAllDataFromDb(sqlStringGetKunden, iRowCount, 7);

		return data[row][column];

	}


}

Die Tabelle wird mit den Daten aus der Datenbank einwandrei angezeigt nur die Spaltennamen, werden nicht ausgegeben.

Kann mir jemand bitte sagen wo ich hier den Fehler gemacht habe?

Gruß

Johnny

Bearbeitet von Johnny90
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast Du Deiner JTable auch gesagt, dass Du den Header der Tabelle angezeigt haben willst?

JTable.setAutoCreateColumnsFromModel(true); oder

JTable.createDefaultColumnsFromModel();

Aber was anderes, Dein TableModel ist sehr ressourcenfressend!

- data[][] solltest Du nur einmal ausführen!

- und im Normalfall row und column auf ArrayIndexOutOfBoundsException prüfen.

public Object getValueAt(int row, int column) 

{

	//data array wird gefüllt mit werten aus datenbank

	if ( data == null )

		data =  m_oFahrdienstDatenbank.getAllDataFromDb(sqlStringGetKunden, iRowCount, 7);

	if ( data != null

		 && row < data.length && row >= 0

	     && data[row] != null

	     && column < data[row].length && column >= 0 )

		return data[row][column];


	return null;

}

Dann musst Du nur noch ein reset() oder update() definieren und dort dann

data = null;

fireTable...Changed();

setzen, so dass beim nächsten Aufruf von getValueAt() wieder das Model geladen wird.

Bearbeitet von VaNaTiC
Link zu diesem Kommentar
Auf anderen Seiten teilen

danke für die antwort

ich hab aber vergessen, dass man die JTable in ein JScrollPane einfügen muss um die Spaltennamen anzeigen lassen zu können...

jetz funktionierts

das mit dem resourcenfressen is mir auch schon aufgefallen :)

hätt ich wahrscheinlich später noch gefragt wie ich das am besten umgehe.

top, dass du mir das schon so geschrieben hast

also danke für die hilfe

Gruß

Johnny

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Zusammen!

ich hab da auch mal eine Frage!

Wie meinst du das mit dem nur einmal ausführen der data[][]. Ich habe nämlich auch ein Table (mit einem TableModel) und das wird erst mit einem leeren Array angezeigt so bald jedoch der User wünscht das sie befüllt wird würd das Array mit Daten voll gepumpt und das TableModel neu initialisiert und die Daten angezeigt. Das alles passiert jedes mal wenn der User Kritierien zur Anzeige ändert.

Geht das auch perfomanter? Weil ich irgendwie grad auf dem Schlauch stehe wie das gemeint war mit dem Ressourcen fressend :eek

MfG

Saban

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für Dein Problem Saban bräuchte man mehr Infos ob das optimiert werden kann.

Fakt ist das Problem hier war, dass in getValueAt(int row, int col) jedesmal das SELECT-Query an die Datenbank abgesetzt wurde.

Wenn man sich nun überlegt, dass die JTable diese Funktion pro Zeile MAL pro Spalte aufruft, kannst Du Dir vorstellen, wie oft das SELECT umsonst ausgeführt wird.

Ganz genau AnzahlZeilen * AnzahlSpalten - 1!

Das war damit gemeint. Wenn Du der Meinung bist, dass bei Dir auch irgendwas nicht passt, dann poste doch in einem neuen Thread ein bisschen Quellcode und Infos.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...