我有一个JavaFX TreeView / TreeCell,它有一个按钮作为TreeCell图形的一部分。我想让按钮右对齐,使它们显示为场景右边缘附近的一列,无论树节点或文本宽度的级别如何。我试图在包含按钮的HBox中添加一个spacer,但它似乎不会影响任何东西。有没有一种简单的方法来实现我想要的东西,或者我是否需要求助于计算树形单元的可用空间并在HBox上设置首选大小?这是我的代码的简化版本:
public class TreeCellAlignment extends Application {
private static class CustomTreeCell extends TreeCell<String> {
private HBox box = new HBox(4);
public CustomTreeCell() {
setContentDisplay(ContentDisplay.RIGHT);
Region spacer = new Region();
HBox.setHgrow(spacer, Priority.ALWAYS);
box.getChildren().addAll(spacer, new Button("X"));
}
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : item);
setGraphic(empty ? null : box);
}
}
@Override
public void start(Stage primaryStage) {
TreeItem<String> root = new TreeItem<>("root");
root.getChildren().add(new TreeItem<>("child"));
TreeView<String> tree = new TreeView<>(root);
tree.setCellFactory(param -> new CustomTreeCell());
primaryStage.setScene(new Scene(tree, 300, 200));
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}