Sortierbare JTreeTable.

Status
Nicht offen für weitere Antworten.

DocMcFly

Bekanntes Mitglied
Hallo,

Ich habe das Beispiel von http://java.sun.com/products/jfc/tsc/articles/treetable1/index.html als Basis für meine JTreeTable verwendet.

Jetzt wollte ich die JTreeTable ableiten und mit Sortfunktionen erweitern. Dazu packe ich das einfache Modell in einen Adapter. Der Adapter biegt die Indizies so um, dass nach dem Sortieren die richtigen Zellen aus dem einfach Modell geladen werden.

Wenn ich das sortierte Modell der TreeTable übergebe, dann klappt es. Wird aber durch einen Mouse-Event das Sortieren angestossen, so bleibt die Tabelle, so wie sie war.

Ich dachte fireTableDataChanged ist dafür da - aber es wird nicht im Model (über den Adapter) neu nach den Werten gefragt. :( Auch wenn ich ...
Code:
      ((TreeTableModelAdapter) this.treeTableSortable.getModel()).fireTableChanged(  
        new TableModelEvent(
          this.treeTableSortable.getModel(), 
          0,
          this.treeTableSortable.getModel().getRowCount(), 
          TableModelEvent.ALL_COLUMNS, 
          TableModelEvent.UPDATE)
      );
... schreibe, dann passiert nix im Modell.

Ich hab einen Listener noch dazu gepackt -> Seltsam! dieser reagiert. Die einzige Möglichkeit, die ich bisher gesehen hab, war die Neuerstellung eines Models und das alte zu überschreiben, dann hat er auch die Werte neu gelesen. Ist aber sehr zeitaufwendig - und ich habe bereits ein Model. Ich halte es also für nicht clever einen Clone zu bauen nur um JTable dazu zukriegen, die Werte vom Modell einzu lesen.
Kann mir jemand sagen, wie ich JTable, dazu bekomme, dass es das Model wirklich neu liest?

Danke fürs Lesen und Antworten
Gruß Clemens

PS: Hat noch jemand eine Ahnung, wie man den Event des Spalten-Drag-Drops abfängt? Welcher Listener ist dafür gut?
 

AlArenal

Top Contributor
Du keinst ein Model über ein Model stülpen. Das innere enthält die Rohdaten und das äußere macht das Umbiegen der Indices in den get-Methoden und den Events (die müssen auch umgebogen werden) . Das äußere benutzt du dann im View.

Aber in einem TreeTable kannste ja mal nicht viel sortieren - immer nur innerhalb der Children eines Parent..
 

DocMcFly

Bekanntes Mitglied
Du keinst ein Model über ein Model stülpen.

Den Satz versteh ich nicht.

jTreeTable ist von jTable abgeleitet. Was ich einfach nicht verstehe, ist die Tatsache: wenn ich
Code:
((TreeTableModelAdapter) this.treeTableSortable.getModel()).fireTableChanged(  
        new TableModelEvent(
          this.treeTableSortable.getModel(), 
          0,
          this.treeTableSortable.getModel().getRowCount(), 
          TableModelEvent.ALL_COLUMNS, 
          TableModelEvent.UPDATE)
      );

aufrufe sollten doch alle Zeilen "geupdatet" werden. Werde sie aber nicht. Es wird zwar durch die Fire-Methode der Event ausgelöst - aber irgendwie nicht alle Zeilen durch laufen... ich hab den Eindruck die Tabelle cacht die Werte irgendwo? - Aber wo?

Kann mir da jemand einen Denkanstoss geben?

Danke Clemens
 

AlArenal

Top Contributor
DocMcFly hat gesagt.:
Du keinst ein Model über ein Model stülpen.

Den Satz versteh ich nicht.

"keinst" = "kannst" :D

Ist eigentlich relativ gängig. Zumindest mache ich es so mit TreeModels und die Jungs von GlazedLists machen es wohl auch so.

jTreeTable ist von jTable abgeleitet.

Ja, aber das TreeTableModel ist vom TreeModel abgeleitet und die TreeTable erhält ihre TableEvents über den TreeTableModelAdapter. Wenn du die Daten änderst, musst du ganz unten in der Kette ansetzen, d.h. im TreeModel. Von dort werden die Events dann automatisch an den TreeModelListener im TReeTableModelAdapter weitergeleitet und gelangen von dort in die TreeTable.
 

DocMcFly

Bekanntes Mitglied
:) Danke... für den Tipp - "ganz unten in der Kette ansetzen", der hat mich echt weiter gebracht.

meine sortierbare JTreeTable funktioniert jetzt (sogar , wenn man die Spalten vertauscht *jippy*).

Aber wie immer ein Problem gelöst -> 1000 neue Fragen... aber dazu weiter in einem neuen Thread.

Danke noch mal
Clemens
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben