【发布时间】:2015-06-23 06:17:37
【问题描述】:
我有 GridPane,它有两列:第一列包含固定大小的 ImageView,第二列包含带有 Text 元素的 VBox。我需要这个 VBox 来适应列宽。网格具有正确的尺寸,ImageView 也是,但第二列中的 VBox 适合它包含的文本,而不适合父级(网格)。
VBox box = new VBox();
// all three texts can be changed during program execution by user
// (so 'box' width cannot be based on children widths)
box.getChildren().addAll(new Text("1"), new Text("2"), new Text("3"));
box.setStyle("-fx-background-color: red;");
Image image = ...; // image is always 150x150 px
ImageView imgView = new ImageView(image);
GridPane grid = new GridPane();
grid.add(imgView, 0,0);
grid.add(box,1,0);
grid.add(new Text("another content"), 0,1,2,1);
根据给定的示例,我希望“框”与“网格”对象的第二列具有相同的宽度。 如何解决这个问题?
带绿色边框的容器:GridPane 网格 带有浅蓝色边框的容器:VBox box GridPane 有红色背景,VBox 有粉红色背景。你可以看到它显然不适合它的父宽度。
提前致谢
【问题讨论】:
-
请提供mcve,例如FXML 文件(如果您使用 FXML)或 Java 代码(如果您不是)。
-
内容已编辑。我希望现在很清楚
-
你想让VBox和
ImageView的宽度一样吗?second column是什么?根据提供的代码,VBox 在第二列。 -
我不相信你不明白我的问题。恐怕我不能让它更简单...第二列是 GridPane 的列,其中嵌套了 VBox (grid.add(box,1,0); )。我希望 VBox 与此列具有相同的宽度。令人惊讶的是,我正在谈论的列的宽度约为 1000 像素,但放在其中的 VBox 有 500 像素,因为它的宽度适合它包含的 Text 对象。
-
@PawełWójcik 设置
GridPane.setHgrow(box, Priority.Always);是否适合您?