如何在JavaFXTreeCell中对图形进行右对齐
我有一个JavaFXTreeView/TreeCell,它有一个按钮作为TreeCell图形的一部分。我希望使按钮右对齐,使其显示为靠近场景右边缘的一列,而不考虑树节点的级别或文本宽度。我试图在包含按钮的HBox中添加一个间隔符,但它似乎没有影响任何东西。有没有一个简单的方法来实现我想要的,或者我需要求助于计算树单元的可用空间和在HBox上设置一个首选大小?以下是我的代码的简化版本:如何在JavaFXTreeCell中对图形进行右对齐,javafx,Javafx,我有一个JavaFXTreeView/TreeCell,它有一个按钮作为TreeCell图形的一部分。我希望使按钮右对齐,使其显示为靠近场景右边缘的一列,而不考虑树节点的级别或文本宽度。我试图在包含按钮的HBox中添加一个间隔符,但它似乎没有影响任何东西。有没有一个简单的方法来实现我想要的,或者我需要求助于计算树单元的可用空间和在HBox上设置一个首选大小?以下是我的代码的简化版本: public class TreeCellAlignment extends Application {
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);
}
}
公共类TreeCellAlignment扩展了应用程序{
私有静态类CustomTreeCell扩展了TreeCell{
专用HBox盒=新HBox(4);
公共CustomTreeCell(){
setContentDisplay(ContentDisplay.RIGHT);
区域间隔=新区域();
HBox.setHgrow(间隔符,优先级,始终);
box.getChildren().addAll(间隔符,新按钮(“X”));
}
@凌驾
受保护的void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
setText(空?空:项);
设置图形(空?空:框);
}
}
@凌驾
公共无效开始(阶段primaryStage){
TreeItem root=新的TreeItem(“根”);
root.getChildren().add(新树项(“子项”));
树视图树=新树视图(根);
setCellFactory(参数->新建CustomTreeCell());
初始阶段。设置场景(新场景(树,300200));
primaryStage.show();
}
公共静态void main(字符串[]args){
应用程序启动(args);
}
}
据我所知,唯一的方法是手动设置graphicTextGap
,或者将其绑定到基于总宽度的计算中。有点糟糕,但我认为目前没有更好的解决方案。您需要的是所谓的TreeTableView(FX8提供):