0
我不確定我是否缺少某些東西,如果是缺陷/不支持。我試圖用updateItem-Method設置treeitem的背景顏色。但是當我滾動時,其他的treeite也會變色。JavaFX TreeView cellFactory樣式錯誤
這裏的代碼來重現問題:
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;
}
}
輸出示例:
謝謝!當然。有時你看不到樹木...... –
據我所知,updateItem指的是單元本身就像一個包裝,你必須在內容改變時更新它。但是對我而言(技術上)仍然不清楚爲什麼總有其他細胞變色,而不是一個。 –
@Michael_S:滾動時,項目被分配到不同的單元格。這樣做是爲了限制用於顯示內容的'Node'的數量。 (「TreeView」中每個可見「行」只有一個單元格,但只有擴展祖先(=可見項目)的編號節點可以是任意大的。) – fabian