derflix Geschrieben 9. August 2002 Teilen Geschrieben 9. August 2002 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
derflix Geschrieben 9. August 2002 Teilen Geschrieben 9. August 2002 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 ! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BMAS Geschrieben 9. August 2002 Autor Teilen Geschrieben 9. August 2002 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
derflix Geschrieben 9. August 2002 Teilen Geschrieben 9. August 2002 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BMAS Geschrieben 14. August 2002 Autor Teilen Geschrieben 14. August 2002 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.