TableModelEvent

Status
Nicht offen für weitere Antworten.

SebiB90

Top Contributor
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?
 
die listener werden doch automatisch benachrichtigt wenn du was an der table änderst...
 
ööö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??
 
was brauch ich jetzt noch ein tablecolumnmodel???
das geht ganrantiert auch ohne ich muss nur wissen wie das event lautet
 
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.
 
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
Code:
new TableModelEvent(???);
welche parameter muss ich angeben???
 
Du mußt die Daten über das TableModel manipulieren, dann werden alle Listener automatisch über die Veränderungen informiert.
 
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/table/DefaultTableModel.html#addRow(java.lang.Object[])

RTFM
 
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.
 
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:
Code:
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.
 
ich brauch nur HEADER_ROW anzugeben?
warum hat mir das nicht jemand schon früher gesagt
ich werds mal ausprobieren
Danke
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben