Ich bin mir nicht sicher, ob ich etwas vermisse, wenn es ein Fehler/nicht unterstützt wird. Ich versuche die Hintergrundfarbe eines Treeitems mit der updateItem-Methode zu setzen. Aber wenn ich herum scrolle, werden auch andere Baumelemente koloriert.JavaFX TreeView CellFactory Styling Fehler
Hier Code, um das Problem zu reproduzieren:
public class Main extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception
{
StackPane root = new StackPane();
TreeView<String> treeView = new TreeView<String>(getTree());
treeView.setCellFactory(tv -> new TreeCell<String>()
{
@Override
protected void updateItem(String item, boolean empty)
{
super.updateItem(item, empty);
if (item != null)
{
setText(item);
if (item.equals("c5"))
{
setStyle("-fx-background-color: YELLOW");
}
}
}
});
root.getChildren().add(treeView);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
private TreeItem<String> getTree()
{
TreeItem<String> root = new TreeItem<>("root");
TreeItem<String> a = new TreeItem<String>("a");
TreeItem<String> b = new TreeItem<String>("b");
TreeItem<String> c = new TreeItem<String>("c");
root.getChildren().add(a);
root.getChildren().add(b);
root.getChildren().add(c);
for (int i = 0; i < 100; i++)
{
c.getChildren().add(new TreeItem<String>("c" + i));
}
return root;
}
}
Beispielausgabe:
Vielen Dank! Na sicher. Manchmal verlierst du den Wald für die Bäume aus den Augen .... –
Ich verstehe, dass das updateItem die Zelle selbst wie einen Wrapper bezeichnet und du sie aktualisieren musst, wenn sich der Inhalt ändert. Aber es ist mir (technisch) immer noch nicht klar, warum es mehrere andere Zellen gibt, die koloriert werden, anstatt nur eine. –
@Michael_S: Beim Scrollen werden Elemente verschiedenen Zellen zugewiesen. Dies wird gemacht, um die Anzahl von Knoten zu begrenzen, die zum Anzeigen des Inhalts verwendet werden. (Es gibt nur eine Zelle pro sichtbare "Zeile" in der "TreeView", aber die Anzahl der Knoten mit nur erweiterten Vorfahren (= sichtbare Elemente) kann beliebig groß sein.) – fabian