JavaFX JavaFX TableView scrollen färbt falsche Zeilen

saint2801

Mitglied
Hallo liebes Java-Forum,

Ich habe eine Tableview erstellt. Jede Zeile wird mit den Attributen des dazugehörigen Objektes ("Steckerpin") gefüllt. Um jede Zeile in Abhängigkeit vom "Zustand"-Attribut einzufärben, wurde eine RowFactory verwendet.

Sobald die Tableview gescrolled wird, werden die aufkommenden Zeilen ebenfalls im gleichen oder ähnlichen Muster eingefärbt, obwohl deren "Zustand" sich nicht verändert hat.

Hier zwei Bilder zur Veranschaulichung:

1584631417217.png 1584631505564.png

Wenn bis zum Ende der Tabelle gescrollt wird, färben sich die Zeilen wieder weiß.

Hier mein RowFactory-Code:

Java:
 //Zeilenerzeugung und Einfärben der Zeile in Abhängigkeit der Zustandproperty durch RowFaktory
                    durchgangsTable.setRowFactory(tv -> new TableRow<Steckerpin>() {

                        @Override
                        public void updateItem(Steckerpin item, boolean empty) {
                            super.updateItem(item, empty);

                            if (item == null || empty) {
                                setGraphic(null);
                                setStyle("");
                            } else if (item.getZustand().equals(okZustString)) {
                                pseudoClassStateChanged(PseudoClass.getPseudoClass("ok"), true); //Wenn Steckerpin ok, dann grün
                            } else if (item.getZustand().equals(fehlerZustString)) {
                                pseudoClassStateChanged(PseudoClass.getPseudoClass("error"), true); //Wenn Steckerpin fehler,dann rot
                            } else if (item.getZustand().equals(prüfZustString)) {
                                pseudoClassStateChanged(PseudoClass.getPseudoClass("pending"), true); //Wenn Steckerpin geprüft wird, dann gelb
                            }
                        }
                    });

Ich habe bereits gelesen, dass dieser Fehler mit der Verwendung der RowFactory zusammenhängt, da die Zeilen beim Scrollen wiederverwendet werden und somit wahrscheinlich der "Style" übernommen wird. Jedoch finde ich keine Lösung für mein Problem.

Ich bin dankbar für jede Hilfe.
 
NAJAAAAAAA

Du hast es ja eigentlich schon gesagt:
Ich habe bereits gelesen, dass dieser Fehler mit der Verwendung der RowFactory zusammenhängt, da die Zeilen beim Scrollen wiederverwendet werden und somit wahrscheinlich der "Style" übernommen wird. Jedoch finde ich keine Lösung für mein Problem.
Dein Problem ist vermutlich einfach zu lösen, du setzt z.B. pseudoClassStateChanged(PseudoClass.getPseudoClass("ok"), true); aber in dem empty-Zweig nimmst du es nicht mehr weg pseudoClassStateChanged(PseudoClass.getPseudoClass("ok"), false);.

Ich denke, wenn du alle drei Pseudo-Klassen (die ich übrigens als finale Felder in der TableRow ablegen würde - also eine eigene Klasse dafür bauen) im empty-Zweig auf false setzt erledigt sich das Problem.

Aber wie gesagt: Nur eine Vermutung. Ungetestet. Ich arbeite zwar auch mit Pseudo-Klasse aber in einer Row habe ich sie noch nicht verwendet.
 

Zurück
Oben