# JTable +TableModel --> Anpassung der Tabellengröße (Zeilenanzahl)



## katastrophe (21. Sep 2010)

Hallo.

Ich habe ein kleines Problem und hoffe hier kann mir evtl. jemand helfen. Ich möchte nämlich einen Stundenplan erstellen, der sich, entsprechend einer Auswahl von verschiedenen Unterrichtsfächern, sowohl inhaltlich, als auch in der Größe anpasst. Mein Problem besteht nun darin, dass sich die Tabelle zwar inhaltlich ändert, also Einträge hinzugefügt werden bzw. gelöscht werden, wenn diese Einträge aus- bzw. abgewählt werden. Allerdings behält die Tabelle immer die selbe Anzahl an Zeilen bei, die sie bei der Initialisierung hat.

Was kann ich tun, damit die Zeilenanzahl der Tabelle sich so ändert, dass immer der letzte Eintrag in der untersten Zeile steht, also keine leeren Zeilen nach unten vorhanden sind?


----------



## SlaterB (21. Sep 2010)

die Anzahl der Zeilen und auch deren Inhalt hängen anscheinend von 
> Model.getModel()
> model.getAktiveModule()
> getVeranstaltungen()
> getBlock()
usw. ab, eben genau was in getRowCount() steht

wie soll da jemand von außen etwas zu sagen?
vielleicht musst du in dieses andere unbekannte Model eine Veranstaltung oder einen Block hinzufügen, niemand weiß es,
dein Code oder deine Erklärungen sagen praktisch nichts dazu außer dass man erkennt, dass eben alles von Model.getModel() usw. abhängt

-------

interessante Nebenthemen:
was bedeutet es, wenn 'Einträge hinzugefügt' werden können, aber sich die Zeilenanzahl nicht ändert, waren die Zeilen vorher leer?

'Anzahl an Zeilen bei Initialisierung' klingt seltsam, was ist denn die Initialisierung, StundenplanTabellenModel hat keinen Konstruktor,
wie gesagt hängt alles von ganz anderen Klassen ab


----------



## katastrophe (22. Sep 2010)

Entschuldigung. Du hast natürlich Recht. Habe meinen Beitrag gerade nochmal durchgelesen. 

Der Sachverhalt lässt sich auch nur schwer erklären, ohne ganze Romane zu schreiben. Daher möchte ich mein Problem nochmal allgemein schildern:

*Meine Tabelle hat x Zeilen. Nun möchte ich bei einem Event, dass die Anzahl der Zeilen auf y geändert wird (Spaltenanzahl bleibt immer gleich). x und y sind bekannt. 
*
Was nun wo eingetragen wird, ist erstmal egal. Daher habe ich auch oben den Code mal rausgenommen.
Ich suche also eine Möglichkeit meiner Tabelle zu sagen, verlängere dich um 3 Zeilen oder lösche deine beiden letzten Zeilen usw.

Ich hoffe es ist einigermaßen verständlich, worauf ich hinaus möchte.


----------



## SlaterB (22. Sep 2010)

durchaus klar, nur ist 'Was nun wo eingetragen wird' ganz und gar nicht egal, sondern das entscheidende Kriterium,
falls du nicht nur einen Spezialpunkt meinst, siehe (*) weiter unten

als Beispiel kann man das DefaultTableModel anschauen, dort sind die Daten als Vector von Vectoren abgelegt


```
protected Vector    dataVector;

    /**
     *  Inserts a row at <code>row</code> in the model.  The new row
     *  will contain <code>null</code> values unless <code>rowData</code>
     *  is specified.  Notification of the row being added will be generated.
     *
     * @param   row             the row index of the row to be inserted
     * @param   rowData         optional data of the row being added
     * @exception  ArrayIndexOutOfBoundsException  if the row was invalid
     */
    public void insertRow(int row, Vector rowData) {
	dataVector.insertElementAt(rowData, row); 
	[..]
        fireTableRowsInserted(row, row);
    }
```
es sind ca. drei Schritte nötig:
- die Datenlage erweitern, hier eine neue Zeilen in einen Vector einfügen oder bei dir irgendwie anders
- die Tabelle muss über die Änderung der Datenlage informiert werden, per Listener, fire()-Methode, (*)
- das Model muss in seinen get-Methoden richtig auf die Daten zugreifen wenn die JTable den neuen Zustand abfragt, das sollte aber ganz normal eh der Fall sein


----------

