为了账号安全,请及时绑定邮箱和手机立即绑定

网格窗格中的 JavaFX 1 第一列比其他列间隔得更远

网格窗格中的 JavaFX 1 第一列比其他列间隔得更远

BIG阳 2021-09-03 14:43:34
在我的程序中,我尝试将一个填充了 CheckBox 的 HBox 输出到屏幕上。但是,当我运行该程序时,与其他复选框相比,CheckBox "A" 的间距要大得多。这是我的代码:private Scene assets (Stage primaryStage){        GridPane gp = new GridPane();        gp.setVgap(5);        gp.setPadding(new Insets(25, 25, 25, 25));        Text title = new Text("Assets");        title.setFont(Font.font("Arial", FontWeight.BOLD, 14));        gp.add(title, 0, 0);        Text description = new Text("Please select all assets you would like to include in your budget");        gp.add(description, 0, 1);        String [] optionsString = new String []{"A", "B", "C", "D", "E", "F"};        for (int i = 0; i < optionsString.length; i++) {            final int column = i;            final int row = i;            String option = optionsString[i];            CheckBox checkBox = new CheckBox(option);            HBox checkboxContainer = new HBox(checkBox);            checkboxContainer.setSpacing(20);            ChoiceBox<Integer> choice = new ChoiceBox<>();            Label label = new Label("How many " + optionsString[i] + " options do you have?");            choice.getItems().addAll(1, 2, 3, 4, 5);            HBox choiceContainer = new HBox(label, choice);            checkBox.selectedProperty().addListener((o, oldValue, newValue) -> {                if (newValue) {                    gp.add(choiceContainer, 0, row + 4);                } else {                    gp.getChildren().remove(choiceContainer);                }            });            gp.add(checkboxContainer, column, 3);        }        assets = new Scene (gp, 1280, 720);        return assets;    }编辑:这是我在说什么的截图
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

private Scene assets(Stage primaryStage){

                Scene assets;

                GridPane gp = new GridPane();

                gp.setVgap(0);

                //gp.setPadding(new Insets(25, 0, 25, 25));


                Text title = new Text("Assets");

                title.setFont(Font.font("Arial", FontWeight.BOLD, 14));

                gp.add(title, 0, 0);


                Text description = new Text("Please select all assets you would like to include in your budget");

                gp.add(description, 0, 1);


                String [] optionsString = new String []{"A", "B", "C", "D", "E", "F"};

                HBox checkboxContainer = new HBox();

                checkboxContainer.setPadding(new Insets(5, 5, 5, 5));

                checkboxContainer.setSpacing(20);


                for (int i = 0; i < optionsString.length; i++) {

                    final int column = i;

                    final int row = i;

                    String option = optionsString[i];

                    CheckBox checkBox = new CheckBox(option);

                    ChoiceBox<Integer> choice = new ChoiceBox<>();

                    Label label = new Label("How many " + optionsString[i] + " options do you have?");

                    choice.getItems().addAll(1, 2, 3, 4, 5);


                    HBox choiceContainer = new HBox(label, choice);


                    checkBox.selectedProperty().addListener((o, oldValue, newValue) -> {

                        if (newValue) {

                            gp.add(choiceContainer, 0, row + 4);

                        } else {

                            gp.getChildren().remove(choiceContainer);

                        }

                    });

                    checkboxContainer.getChildren().add(checkBox);

                }

                gp.add(checkboxContainer, 0, 2);


                assets = new Scene (gp, 1280, 720);


                return assets;

            }

CheckboxContainer 必须在 for 循环之外。


查看完整回答
反对 回复 2021-09-03
?
GCT1015

TA贡献1827条经验 获得超4个赞

您无意中将第 0 列(第一列)的宽度设置为文本的宽度,“请全选……等等”。

这是因为 GridPane 使用列的最大元素的首选宽度作为该列的宽度。

您可能希望从 GridPane 中删除文本并将其作为 HBox 或 VBox 的一部分,而 GridPane 也是其中的一个元素。感觉这是最自然的解决方案。

要么是那样,要么你将不得不在文本元素的跨度上胡闹,所以 GridPane 认为它应该跨多个列。

GridPanes 最适合自然地可以被认为是网格的数据,其中每列的数据宽度相似。那不是你所拥有的。

然而,您可以强制 GridPane 通过一点点反复试验来做几乎任何事情。


查看完整回答
反对 回复 2021-09-03
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信