Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFXTreeCell中对图形进行右对齐_Javafx - Fatal编程技术网

如何在JavaFXTreeCell中对图形进行右对齐

如何在JavaFXTreeCell中对图形进行右对齐,javafx,Javafx,我有一个JavaFXTreeView/TreeCell,它有一个按钮作为TreeCell图形的一部分。我希望使按钮右对齐,使其显示为靠近场景右边缘的一列,而不考虑树节点的级别或文本宽度。我试图在包含按钮的HBox中添加一个间隔符,但它似乎没有影响任何东西。有没有一个简单的方法来实现我想要的,或者我需要求助于计算树单元的可用空间和在HBox上设置一个首选大小?以下是我的代码的简化版本: public class TreeCellAlignment extends Application {

我有一个JavaFXTreeView/TreeCell,它有一个按钮作为TreeCell图形的一部分。我希望使按钮右对齐,使其显示为靠近场景右边缘的一列,而不考虑树节点的级别或文本宽度。我试图在包含按钮的HBox中添加一个间隔符,但它似乎没有影响任何东西。有没有一个简单的方法来实现我想要的,或者我需要求助于计算树单元的可用空间和在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);
    }
}
公共类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提供):