如果您想添加Node
类型,则可以使用TreeItem
的graphic
属性。
@Override
public void start(Stage primaryStage) {
CheckBoxTreeItem<String> item = new CheckBoxTreeItem<>(null, new Hyperlink("abc"));
CheckBoxTreeItem<String> item2 = new CheckBoxTreeItem<>("Hello World");
CheckBoxTreeItem<String> item3 = new CheckBoxTreeItem<>("42");
item.getChildren().setAll(item2, item3);
TreeView<String> treeView = new TreeView<>(item);
treeView.setCellFactory(CheckBoxTreeCell.forTreeView());
Scene scene = new Scene(treeView);
primaryStage.setScene(scene);
primaryStage.show();
}
或者如果TreeItem
值包含Node
,你需要修改的CheckBoxTreeCell
的updateItem
方法的位:
CheckBoxTreeItem<Object> item = new CheckBoxTreeItem<>(new Hyperlink("abc"));
CheckBoxTreeItem<Object> item2 = new CheckBoxTreeItem<>("Hello World");
CheckBoxTreeItem<Object> item3 = new CheckBoxTreeItem<>("42");
CheckBoxTreeItem<Object> item4 = new CheckBoxTreeItem<>(new Hyperlink("def"));
item.getChildren().setAll(item2, item3, item4);
TreeView<Object> treeView = new TreeView<>(item);
treeView.setCellFactory(tv -> new CheckBoxTreeCell<Object>() {
private final HBox graphicWrapper = new HBox();
{
graphicWrapper.setAlignment(Pos.BASELINE_LEFT);
}
@Override
public void updateItem(Object item, boolean empty) {
graphicWrapper.getChildren().clear();
super.updateItem(item, empty);
if (!empty && (item instanceof Node)) {
// replace graphic & text
setText(null);
graphicWrapper.getChildren().setAll(getGraphic(), (Node) item);
setGraphic(graphicWrapper);
}
}
});
去与方法头号。像魅力一样工作。对于那些阅读,请确保包含setCellFactory行。否则,你会得到只有字符串的TreeView,没有CheckBoxes。 – mpowell48