Swing ListCellRenderer einer JList zeichnet sporadisch falsch

hansmueller

Bekanntes Mitglied
Hallo,

ich habe einen ListCellRenderer so modifiziert, damit man damit auch mehrere Zeilen in einen Listeneintrag darstellen kann.
Es handelt sich dabei um ein JPanel, in dem mit Hilfe des GroupLayout-Managers diverse JLabels angeordnet sind. Die JLabels, welche nicht gebraucht werden, werden auf .setVisible(false) gesetzt.
Es ist in vom Prinzip in etwa so aufgebaut wie http://www.java-forum.org/awt-swing-swt/102014-jlist-jspinner.html, nur ohne JSpinner. Durch das Einsetzen von Rahmen lasse ich das ganze wie eine JTable aussehen.

Ich benutze ein DefaultListModel für die Daten.
Wenn ich neue Daten in der Liste darstellen will, lösche ich zuerst mit .clear das DefaultListModel und füge die neuen Daten hinzu (aus einer Datenbank). Dann wird der selektierte Eintrag gesetzt.
Diese ganze Aktion wird in einem separaten Thread ausgeführt, da unter anderem die Datenbankabfrage doch sehr Zeitaufwendig ist.
Danach wird für das ganze Fenster .pack() und .repaint() ausgeführt.

Mein Programm ist mehrsprachig und beim Wechseln der Sprache wird die Liste neu erstellt.
Dabei tritt nun sporadisch manchmal ein Fehler auf.
Machmal stimmt bei einem Listeneintrag die Höhe nicht mehr. Das tritt wie gesagt nur sporadisch auf und meist ist es einer der oberen Listeneinträge.
Wenn man den entsprechenden Eintrag markiert, verändert sich seine Höhe nicht.
Erst wenn man das DefaultListModel leert und wieder neu befüllt, verschwindet der Fehler wieder, manchal aber auch wieder nicht.
Es wird auch keinerlei Fehlermeldung ausgegeben.
Ich habe es schon mit .validate() und .revalidate() probiert, das hat aber nichts genützt.

Leider ist der Code zu umfangreich und kompliziert um ihn hier zu posten.
Und ich habe es nicht geschafft ein KSKB zu erstellen, das diesen Fehler reproduziert.

Würdet ihr bitte eure Kristallkugeln zu rate ziehen um mir ein paar Tipps zu geben, woran das liegen könnte und wie man es abstellt.
Ich schätze mal, daß das evtl. irgendwas mit den Thread zu tun hat.

Im Anhang sind ein paar Bilder der Liste. Beispiel00 und Beispiel02 sind in Ordnung, Beispiel01 und Beispiel03 weisen den besagten Fehler auf.
Es ist noch anzumerken, daß die Listeneinträge in dieser Liste momentan nur 1 oder 3 zeilig sind.

MfG
hansmueller
 
G

Gast2

Gast
Warum lässt du es wie eine Tabelle aussehen?
Was spricht dagegen einfach eine Tabelle zu benutzen?

Zu deinem Fehler kann vieles schiefgehen.
Falsches Layout, Zeichnen im falschen Thread, Falscher Renderer der sich falsch zeichnet...
 

hansmueller

Bekanntes Mitglied
Hallo,

ich konnte den Fehler etwas eingrenzen.
Er tritt anscheinend nur auf, wenn es einen markierten Eintrag in der Liste gibt.

Ich experimentiere jetzt mal mit .clearSelection() herum.

MfG
hansmueller
 

hansmueller

Bekanntes Mitglied
SirWayne hat gesagt.:
Wie gesagt mach es doch einfach gescheit mit ner JTable

Habe mal im Netz geschaut und es ist nicht gerade einfach einer JTable die Mehrzeiligkeit in einer Zelle beizubringen.

Zumal die JTable ja eigendlich "nur" eine sehr komplizierte JList ist. Da beide was den Renderer betrifft, auf dem selben Prinzip beruhen, fürchte ich fast, daß auch bei einer JTable dasselbe Problem wieder auftauchen könnte.

Mit der JTable werde ich mich in ein paar Monaten sowieso näher beschäftigen, weil ich diese für mein Programm brauche, aber dann reicht eine einfache einzeilige Zellendarstellung.

Nun gut, ich glaube ich habe eine Lösung gefunden. Vielleicht kann das ja irgendwer mal gebrauchen:

Zuerst habe ich meinen ListCellRenderer etwas angepaßt. In der zu implementierenden Methode getListCellRendererComponent() setze ich am Anfang alle JLabels auf .setVisible(false). (Eigendlich ist diese Aktion überflüssig, da beim Ausführen dieser Methode alle JLabels den richtigen Zustand bekommen, aber vom Gefühl her taucht der Fehler dann weniger auf.)

Als zweiten Schritt habe ich die Methode etwas ergänzt, die die Liste befüllt. Wenn die Liste geändert werden soll, rufe ich zuerst mal .clearSelection() in einem SwingUtilities.invokeAndWait auf, um sicher zu gehen, das es keinen markierten Eintrag mehr gibt.
Dann setze ich die Liste mit .setVisible(false) unsichtbar (ebenfalls in einem SwingUtilities.invokeAndWait).
Dann lasse ich die Liste neu befüllen und eine Zeile markieren.
Zum Schluß setzt ich die Liste wieder auf .setVisible(true).

Der Fehler scheint jetzt nicht mehr aufzutreten.
Ich schätze mal, daß das .setVisible() auf die JList den Ausschlag gibt.

MfG
hansmueller
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
hdi Swing ListCellRenderer + JTextArea + LineWrap AWT, Swing, JavaFX & SWT 6
frankred Swing Eigener ListCellRenderer D'n'D "MOVE" - Mauszeiger flackert AWT, Swing, JavaFX & SWT 14
hdi Swing ListCellRenderer und LookAndFeel AWT, Swing, JavaFX & SWT 11
K Swing Schrift in Kopfzeile von JComboBox über ListCellRenderer ändern AWT, Swing, JavaFX & SWT 2
H JFormatterTextField und JButton in JList (ListCellRenderer) AWT, Swing, JavaFX & SWT 2
N JList (JXList) ListCellRenderer zur Laufzeit ändern (Anzeigefehler) AWT, Swing, JavaFX & SWT 6
GilbertGrape Kleinigkeit beim ListCellRenderer AWT, Swing, JavaFX & SWT 2
A ListCellRenderer und JScrollPane AWT, Swing, JavaFX & SWT 4
Tom299 JList ListCellRenderer wird überschrieben AWT, Swing, JavaFX & SWT 8
J problem mit ListCellRenderer und in der zeile ein Jbutton AWT, Swing, JavaFX & SWT 5
A JTabbedPane JList Listcellrenderer AWT, Swing, JavaFX & SWT 5
R JList + ListCellRenderer AWT, Swing, JavaFX & SWT 1
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
T VerifyListener - Ersetzen einer 0 AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
M Daten zufällig Einlesen aus einer Datei (binäres Format) AWT, Swing, JavaFX & SWT 7
ExceptionOfExpectation Mit einer laufenden GUI Applikation eine Datei in dem Rechner löschen AWT, Swing, JavaFX & SWT 2
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
H JavaFX Timeline II: Verschieben einer ImageView AWT, Swing, JavaFX & SWT 16
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
L Swing TextPanel Schrift untereinander und auf einer Höhe AWT, Swing, JavaFX & SWT 3
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
Ernesto95 JavaFX Return Value nach Beendigung einer Animation AWT, Swing, JavaFX & SWT 15
melaniemueller Wortliste in einer Datei ablegen AWT, Swing, JavaFX & SWT 12
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
mac2010 JavaFX Einbindung einer Karte AWT, Swing, JavaFX & SWT 1
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
W Aufrufen einer bestimmten Scene mit if-Bedingung AWT, Swing, JavaFX & SWT 4
J Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
missy72 JavaFX ObservableList in einer ArrayList speichern. AWT, Swing, JavaFX & SWT 7
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
L JavaFX Exception nach includieren einer fxml // nested controller AWT, Swing, JavaFX & SWT 1
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
G Verknüpfung einer pdf Datei AWT, Swing, JavaFX & SWT 2
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
@SupressWarnings() JavaFX Auf den Controller einer ListCell zugreifen AWT, Swing, JavaFX & SWT 4
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
H 3 verschiedene Nachrichten in einer FXML View die Infos kommen aus DB AWT, Swing, JavaFX & SWT 4
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
S Java GUI durch variable Größe einer Map anpassen AWT, Swing, JavaFX & SWT 3
B Textfelder in einer ListView ausgeben AWT, Swing, JavaFX & SWT 13
J Searchfunktion auf einer MS Access Datenbank AWT, Swing, JavaFX & SWT 7
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
FRI3ND JavaFX: Wie kann ich einer Scene Argumente übergeben? AWT, Swing, JavaFX & SWT 14
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
K JavaFX ViewTable mit einer LinkedList befüllen AWT, Swing, JavaFX & SWT 3
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
MiMa Selektion aus einer ListView AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
D JavaFX Einbinden einer .fxml AWT, Swing, JavaFX & SWT 1
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Prüfung einer Eingabe auf Gleitkommazahl AWT, Swing, JavaFX & SWT 5
J Suchmaschine einer Datenbank AWT, Swing, JavaFX & SWT 5
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
M Auswahl aus einer ListView AWT, Swing, JavaFX & SWT 3
J JavaFX - Felder (Label) in einer ForSchleife bearbeiten AWT, Swing, JavaFX & SWT 4
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
C JavaFX Tief setzen in der Überschrift einer Tabellenspalte AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben