Zum Inhalt springen

Mein Programm hängt


BMAS

Empfohlene Beiträge

Ich glaube Du hast einen kleinen Denkfehler im Programm.

Du übergibst bei der Erzeugung der Tabelle einen Vektor mit den Daten und einen mit den Spaltennamen.

Um einen Wert auszulesen ist nur der Vektor mit den Daten notwendig.

Der Datenvektor enthält wiederum für jede Zeile einen eigenen Vektor welcher dann die eigentlichen Daten enthält.

Wenn Du also das Objekt an der Stelle x,y ermitteln willst, musst du den y. Vektor im Vektor Datenvektor auslesen und dort dann das x. Objekt.

Im Prinzip so:

Vector Zeile = datenvektor.elementAt(y);

Wert = Zeile.elemntAt(x);

Hoffe das beantwortet die Frage schon.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier nochmal Deine Funktion in umgeschriebener Fassung:


public Object getValueAt(int rowIndex, int columnIndex)
{
try {
Vector Zeile = (Vector)Daten.elementAt(rowIndex);
return Zeile.elementAt(columnIndex);
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
}
[/PHP]

Achtung: Koordinatensystem beginnt in diesem Fall bei 0 !

Link zu diesem Kommentar
Auf anderen Seiten teilen

JUHHUUUUU! Danke jetzt geht alles ganz prima! Die Tablelle kann ich jetzt updaten also kann der Benutzer nach beliebigen Dingen suchen, der Select Befehl wird erstellt und das Ergebnis im JTable angezeigt! Danke Jungs!

So und da alles geht, hier mal der Quellcode, für diejenigen, die dieselben Probleme haben:


import java.util.Vector;

public final class CustomTableModel implements javax.swing.table.TableModel {

private int numcols, numrows;

private Vector daten;
private Vector spalten;
public CustomTableModel(Vector daten, Vector spalten) {

this.daten = daten;
this.spalten = spalten;

this.numrows = daten.indexOf(daten.lastElement()) + 1;
this.numcols = spalten.indexOf(spalten.lastElement()) + 1;
}
public void addTableModelListener(javax.swing.event.TableModelListener l) {
}
public Class getColumnClass(int columnIndex) {
return String.class;
}
public int getColumnCount() {
return numcols;
}
public String getColumnName(int columnIndex) {

return spalten.elementAt(columnIndex).toString();
}

public int getRowCount() {
return numrows;
}
public Object getValueAt(int rowIndex, int columnIndex) {

{
try {
Vector Zeile = (Vector) daten.elementAt(rowIndex);
return Zeile.elementAt(columnIndex);
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
}
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}

public void removeTableModelListener(javax.swing.event.TableModelListener l) {
}

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
}
}[/PHP]

Irgendwo in eurem Programm muss dann halt noch ein JTable erstellt werden, und ihm jedesmal ein neues Model (also das von oben) mit setModel() zugewiesen werden, natürlich mit den neuen Daten die die Tabelle enthalten soll...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Anmerkung will ich zu der Klasse oben noch machen: ich würde Dir empfehlen, keine Leerimplementierungen zu machen, wie z.B. bei "addTableModelListener"! Das sorgt beim Verwenden der Klasse u.U. für Verwirrung und Problemen, zumal Du die Klasse als final deklariert hast und somit Ableitungen (und damit Überschreibungen) unmöglich sind.

Besser finde ich es in dem Fall z.B. Deine Klasse von AbstractTableModel abzuleiten, anstatt das Interface TableModel zu implementieren. In der Klasse AbstractTableModel sind schon alle notwendigen Methoden vorhanden, du musst also nurnoch die Methoden überschreiben die du benötigst.

Oder aber du machst Deine Klasse abstrakt und erzwingst so eine Ableitung mit Implementierung der entsprechenden Funktionen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von derflix

Eine Anmerkung will ich zu der Klasse oben noch machen: ich würde Dir empfehlen, keine Leerimplementierungen zu machen, wie z.B. bei "addTableModelListener"! Das sorgt beim Verwenden der Klasse u.U. für Verwirrung und Problemen, zumal Du die Klasse als final deklariert hast und somit Ableitungen (und damit Überschreibungen) unmöglich sind.

Besser finde ich es in dem Fall z.B. Deine Klasse von AbstractTableModel abzuleiten, anstatt das Interface TableModel zu implementieren. In der Klasse AbstractTableModel sind schon alle notwendigen Methoden vorhanden, du musst also nurnoch die Methoden überschreiben die du benötigst.

Oder aber du machst Deine Klasse abstrakt und erzwingst so eine Ableitung mit Implementierung der entsprechenden Funktionen.

Die Sache mit AbstractTableModel klingt interessant, werde es mal ausprobieren...

Ansonsten nochmal danke euch allen!

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...