# TableModelEvent



## SebiB90 (25. Dez 2004)

ich hab ein jtable mit einem tablemodel. ich will per JMenu die spalten einstellen, welche gezeigt werden und welche nicht. da müsste jetzt alles richtig sein aber ich muss alle listener bnachrichtigen das eine neue spalte hinzugekommen/entfernt worden ist. nur ich raff die tablemodelevents nich.
könntet ihr mir sagen wie die events lauten müssen?


----------



## Roar (25. Dez 2004)

die listener werden doch automatisch benachrichtigt wenn du was an der table änderst...


----------



## SebiB90 (25. Dez 2004)

nö
das muss ich selber machen
jedenfalls wenn man ein tablemodel benutzt


----------



## Roar (25. Dez 2004)

öööh: http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/TableColumnModel.html#removeColumn(javax.swing.table.TableColumn) 
da steht doch: "his method posts a columnRemoved  event to its listeners."
oder was wilslt du machen??


----------



## SebiB90 (25. Dez 2004)

was brauch ich jetzt noch ein tablecolumnmodel???
das geht ganrantiert auch ohne ich muss nur wissen wie das event lautet


----------



## Roar (25. Dez 2004)

hä? *jede* JTable benutzt ein TableModel und ein TableCOlumnModel. ganz gleich ob du selbst eines implementiert hast oder nicht. und mit entsprechenden getter m,ethoden kommst du an dein model.


----------



## SebiB90 (25. Dez 2004)

und wie ruf ich die methode auf????
wie komm ich an das columnmodel????

edit:weiß schon wie, aber wenn ich das mache muss ich wieder alles umschreiben(glaub ich)
wie lautet das event will ich doch nur wissen

```
new TableModelEvent(???);
```
welche parameter muss ich angeben???


----------



## foobar (25. Dez 2004)

Du mußt die Daten über das TableModel manipulieren, dann werden alle Listener automatisch über die Veränderungen informiert.


----------



## SebiB90 (25. Dez 2004)

foobar hat gesagt.:
			
		

> Du mußt die Daten über das TableModel manipulieren, dann werden alle Listener automatisch über die Veränderungen informiert.


und wie?


----------



## foobar (25. Dez 2004)

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/table/DefaultTableModel.html#addRow(java.lang.Object[])

RTFM


----------



## SebiB90 (25. Dez 2004)

kann man irgendwo den code des DefaultTableModel´s angucken???


----------



## foobar (25. Dez 2004)

> kann man irgendwo den code des DefaultTableModel´s angucken???


In Eclipse mußt du die Shift-Taste gedrückt halten und auf den Klassennamen klicken.
Ansonsten mußt du dir den Source aus $JAVA_HOME/src.zip holen.

BTW Wenn es dir darum geht rauszufinden wie das Defaultablemodel die Events verarbeitet, guck dir mal was JTable Tutorial an oder lies Java ist auch eine Insel.


----------



## SebiB90 (25. Dez 2004)

foobar hat gesagt.:
			
		

> BTW Wenn es dir darum geht rauszufinden wie das Defaultablemodel die Events verarbeitet,


genau das will ich ja ganze zeit von euch wissen


----------



## Beni (25. Dez 2004)

Hast du foobars Tipp mit dem Tutorial befolgt (wieso glauch ich nur zu wissen "nein" :roll: :wink: )?

4. Möglichkeit - ein TableModel (mit funktionierendem Beispielcode generieren von TableModelEvent).


----------



## SebiB90 (25. Dez 2004)

Beni hat gesagt.:
			
		

> Hast du foobars Tipp mit dem Tutorial befolgt (wieso glauch ich nur zu wissen "nein" :roll: :wink: )?
> 
> 4. Möglichkeit - ein TableModel (mit funktionierendem Beispielcode generieren von TableModelEvent).


aber wo wird da gezeigt wie man das macht wenn eine neue spalte hinzu kommt?
das raff ich net


----------



## Beni (25. Dez 2004)

Im Prinzip funktionieren Spalten und Zeilen gleich. Praktisch der einzige Unterschied ist, dass beim Konstruktor des Eventes etwas andere Werte angegeben werden müssen.

Das hier ist für eine Zeile:

```
public void addVehicle( Vehicel vehicel ){
      // Das wird der Index des Vehikels werden
      int index = vehicels.size();
      vehicels.add( vehicel );
      
      // Jetzt werden alle Listeners benachrichtigt
      
      // Zuerst ein Event, "neue Row an der Stelle index" herstellen
      TableModelEvent e = new TableModelEvent( this, index, index,
            TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT );
      
      // Nun das Event verschicken
      for( int i = 0, n = listeners.size(); i<n; i++ ){
         ((TableModelListener)listeners.get( i )).tableChanged( e );
      }
   }
```


Im DefaultTableModel wird die Änderung der Anzahl Columns mit dem Feuern eines _new TableModelEvent(this, TableModelEvent.HEADER_ROW)_ abgeschlossen.


----------



## SebiB90 (25. Dez 2004)

ich brauch nur HEADER_ROW anzugeben?
warum hat mir das nicht jemand schon früher gesagt
ich werds mal ausprobieren
Danke


----------



## SebiB90 (26. Dez 2004)

Es klappt  
Danke


----------

