# JList aktualisieren



## Blade230 (16. Aug 2004)

Hallo Forum,

ich habe eine GUI mit einer Liste in einem JScrollPane.

Per Button rufe ich eine Methode auf, die einen neuen Thread startet und Namen in die Liste einträgt.

--> Classe FrmMain startet CPing.

Die Classe CPing ruft nach jedem Ping die Methode addEntry in FrmMain auf.

Am Ende der Mehode addEntry steht lst_ping.repaint() //lst_ping ist der Listenname.

Ich bekomme aber die einträge immer nur angezeigt, wen sich der Thread schließt.


Hat jemand eine Idee?

Tom


----------



## RellikPoc (16. Aug 2004)

Probier's mal mit 
   lst_ping.updateUI();

MfG Poc


----------



## Blade230 (16. Aug 2004)

Leider funzt es nicht   

tom


----------



## RellikPoc (16. Aug 2004)

Wie baust du deine Liste auf?
Hast du ein ListModel (z.B. DefaultListModel), in das du deine Einträge machst und eine JList, der du das ListModel übergibst?
Ich nehme mal an, dass du JList zur Anzeige verwendest, oder?

MfG Poc


----------



## Beni (16. Aug 2004)

@Blade
Startest du diesen Thread wirklich mit "start"? Oder hast du aus versehen "run" genommen?

@RellikPoc
"updateUI" setzt das Look-And-Feel neu, sog. "Dampfhammerlösung" gleich das LaF zu wechseln :wink:


----------



## RellikPoc (16. Aug 2004)

@Beni:
Da repaint() so selten bei meiner derzeitigen Anwendung funxioniert hat (nach Entfernen/Hinzufügen/Ändern von Einträgen im JTree bzw. in der JList), bin ich irgendwann zu dem Glauben gekommen, dass updateUI() die bessere/sicherere Lösung ist...

MfG Poc


----------



## thE_29 (16. Aug 2004)

probier ein validate() une repaint()


----------



## RellikPoc (16. Aug 2004)

Naja, mit 'ner JList funxioniert validate(), repaint() ganz gut, aber beim JTree will's nicht so recht wirken...aber dann hab ich's wenigstens bei den Listen schon mal "ordentlicher" 

MfG Poc


----------



## Roar (16. Aug 2004)

in swing komponenten sollte man die daten immer in einem model haben. also holt die daten aus dem model raus/löscht sie/verändert sie und die liste wird automatisch upgedatet.

wenn man sonst einen Swing kopmonenten aktualisieren will ist repaint() nicht geeignet, da benutzt mal revalidate(). und wenns dann noch ncith gehn auchmal ein repaint() um evtl. übergebliebene Swing stücke zu entfernen.


----------



## RellikPoc (16. Aug 2004)

Roar hat gesagt.:
			
		

> in swing komponenten sollte man die daten immer in einem model haben. also holt die daten aus dem model raus/löscht sie/verändert sie und die liste wird automatisch upgedatet.


Na das sollte ja klar sein, 'ne? 
Am Beispiel JTree: ich hab mein TreeModel, dem ich seine Knoten zuweise. Soll etwas geändert werden, wird's an den Knoten im TreeModel gemacht. Entsprechende Listener werden dem JTree schon bescheid geben. So weit richtig?
Dann versteh ich nicht, warum (re)validate() - repaint() nicht klappt, updateUI aber schon...

MfG Poc


----------



## Beni (16. Aug 2004)

updateUI löscht einfach mal alles, und beginnt von vorne...
revalidate und vorallem repaint merken sich alte Informationen und sind daher (wesentlich) schneller.



> Entsprechende Listener werden dem JTree schon bescheid geben.


Wenn sie nicht bescheid geben, siehst du das sehr deutlich... :wink:


----------



## Blade230 (17. Aug 2004)

Danke an euch Alle. Habe es jetzt hinbekommen. Waren der falsche Threadaufruf (run() anstatt start()).

Danke 
Tom


----------

