Hallo,
sagen wir mal ich habe eine Liste mit Benutzern welche ich in einer JTable anzeige. Das sind so um die 5000. Wenn ich nun nur Name, Strasse etvc anzeige, dann sind dass maximal 1000 Zeichen pro Benutzer, also rund 5MB. Da kann man noch vorm Öffnen einen Dialog mit einer Progressbar anzeigen und die Daten eben laden und dann komplett anzeigen, auch wenn ich das schon nicht schön finde.
Nehmen wir jetzt aber mal an, zu jedem Benutzer gibt es auch noch ein sehr schönes Profilbild welches ca 100k groß ist. Schon bin ich bei über 500MB, was zu laden sehr lange dauert und Speichermäßig auch nicht wirklich akzeptabel ist.
Es gäbe nun 2 Möglichkeiten das besser zu machen.
1) Man baut ein Paging in die Tabelle, also man zeigt immer nur z.B. 100 Einträge an und kann mit einem Vor- und Zurückbutton zu den anderen blättern.
Nachteil hierbei ist, dass man beim Umblättern oder beim setzen eines Suchfilters immer die Daten neu laden muss, was zu "ruckelndem" Arbeiten führt.
2) Man lädt die Bilder nach. Sprich es wird zunächst nur ein Platzhalter "Loading Image..." angezeigt und sobald der Datensatz in der Tabelle sichtbar wird, wird eine Backgroup-Operation angestossen, welche das Bild nachlädt und anzeigt sobald es geladen ist. Hier kann man dann wunderbar auch mit einem Ringbuffer arbeiten, wo das "älteste" Bild immer rausgeworfen wird sobald eine maximal Anzahl Bilder geladen wurde. Dadurch habe ich komplette Kontroller über den Speicher den meine App verbrauchen darf.
Problem hierbei ist, dass ich keine Ahnung habe, ob JTable so etwas anbietet. Gibt es ein Interface, welches mit mitteilt, wenn eine Zeile sichtbar wird und wann sie verschwindet? Eigentlich kann das ja nicht sein, da JTable selber ja gar nicht scrollt oder? Dazu müßte man ja das scrollview bemühen in das man das JTable legen muss.
Oder gibt es hier andere schon fertige Ansätze?
Gruß
Claus
sagen wir mal ich habe eine Liste mit Benutzern welche ich in einer JTable anzeige. Das sind so um die 5000. Wenn ich nun nur Name, Strasse etvc anzeige, dann sind dass maximal 1000 Zeichen pro Benutzer, also rund 5MB. Da kann man noch vorm Öffnen einen Dialog mit einer Progressbar anzeigen und die Daten eben laden und dann komplett anzeigen, auch wenn ich das schon nicht schön finde.
Nehmen wir jetzt aber mal an, zu jedem Benutzer gibt es auch noch ein sehr schönes Profilbild welches ca 100k groß ist. Schon bin ich bei über 500MB, was zu laden sehr lange dauert und Speichermäßig auch nicht wirklich akzeptabel ist.
Es gäbe nun 2 Möglichkeiten das besser zu machen.
1) Man baut ein Paging in die Tabelle, also man zeigt immer nur z.B. 100 Einträge an und kann mit einem Vor- und Zurückbutton zu den anderen blättern.
Nachteil hierbei ist, dass man beim Umblättern oder beim setzen eines Suchfilters immer die Daten neu laden muss, was zu "ruckelndem" Arbeiten führt.
2) Man lädt die Bilder nach. Sprich es wird zunächst nur ein Platzhalter "Loading Image..." angezeigt und sobald der Datensatz in der Tabelle sichtbar wird, wird eine Backgroup-Operation angestossen, welche das Bild nachlädt und anzeigt sobald es geladen ist. Hier kann man dann wunderbar auch mit einem Ringbuffer arbeiten, wo das "älteste" Bild immer rausgeworfen wird sobald eine maximal Anzahl Bilder geladen wurde. Dadurch habe ich komplette Kontroller über den Speicher den meine App verbrauchen darf.
Problem hierbei ist, dass ich keine Ahnung habe, ob JTable so etwas anbietet. Gibt es ein Interface, welches mit mitteilt, wenn eine Zeile sichtbar wird und wann sie verschwindet? Eigentlich kann das ja nicht sein, da JTable selber ja gar nicht scrollt oder? Dazu müßte man ja das scrollview bemühen in das man das JTable legen muss.
Oder gibt es hier andere schon fertige Ansätze?
Gruß
Claus