problem mit JList

  • Themenstarter Themenstarter realkid
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
R

realkid

Gast
ich habe eine JList mit DefaultListModel, in die ich dynamisch elemente einfüge.
nach dem einfügen passiert manchmal folgendes:
die elemente verschwinden, die liste wird ohne Inhalt dargestellt.
wenn ich dann da reinklicke, wird als selektierter index -1 geliefert
beim nächsten einfügen der elemente erscheint dann die liste wieder oder auch nicht
woran kann das liegen ? wird das zeichnen der liste durch andere threads unterbrochen ?
was kann ich dagen am besten unternehmen ?
 
eigentlich sollte das zeichnen der gui nicht durch andere threads unterbrochen werden. alle gui interaktionen sollten nur über den event dispatcher thread ausgeführt werden. (es sei denn du hast versucht selbst drumherum zu programmieren). wie fügst du denn die elemente dder liste hinzu?

Karsten Voigt
http://www.java-performance-portal.org
 
Normalerweise sind die Daten und die grafische Anzeige der Liste getrennt. Deshalb dürfte es nicht unbedingt am Zeichnen liegen. Kann es eventuell sein, das Du das Datenmodell ab und zu mal Neu an die Liste übergibst ?
Vielleicht kannst Du mal Deinen Code posten ?
 
gustav hat gesagt.:
Normalerweise sind die Daten und die grafische Anzeige der Liste getrennt. Deshalb dürfte es nicht unbedingt am Zeichnen liegen. Kann es eventuell sein, das Du das Datenmodell ab und zu mal Neu an die Liste übergibst ?
Vielleicht kannst Du mal Deinen Code posten ?

Ich warte auch schon auf die Details ;-)... Man sollte bei einer JList immer alle Einträge verwerfen und alle Daten über einen Vektor neu hinzufügen. geht übrigens auch am schnellsten (Performance!!!).

Karsten Voigt
http://www.java-performance-portal.org
 
ok, ich bin da jetzt etwas schlauer :
das problem tritt nur dann auf, wenn ich die list-elemente mit
html-code anreichere (brauch ich eigentlich nur, um meine
status-messages unterschiedlich zu färben),
hier die Codefragmente :

Code:
protected DefaultListModel statusMsgListModel;
protected JList statusMessagesView;
...
statusMsgListModel = new DefaultListModel();
statusMessagesView = new JList(statusMsgListModel);  

... 

//einfügen
statusMsgListModel.addElement("<HTML><FONT SIZE=2 COLOR=" +
         colorString + ">" + statusMessage + "</FONT></HTML>");

// hiermit würde es keine probleme geben :        
// statusMsgListModel.addElement(statusMessage);
 
NEIN ! stimmt nicht, passiert nämlich auch ohne html text (nur nicht so oft sichtbar)!!!
Mein fehler war : swing ist nicht thread safe !!!!!!!!!!!!!!!!!!!!!!!!!!!
also das einfügen ins model der jlist besser mit invokeLater() ....
und alles klappt prima !!!!!!!!!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben