Java 将VBox安装到父网格窗格
我有GridPane,它有两列:第一列包含固定大小的ImageView,第二列包含带有文本元素的VBox。我需要这个VBox来适应列宽。网格也有正确的尺寸,ImageView,但第二列中的VBox适合它所包含的文本,而不是父级(网格) 根据给定的示例,我希望“box”与“grid”对象的第二列具有相同的宽度。 如何解决这个问题 带绿色边框的容器:GridPane grid 浅蓝色边框的容器:VBox box GridPane具有红色背景,VBox具有粉色背景。您可以看到,它显然不适合它的父宽度 提前感谢了解首选尺码 当组件放置在场景中而没有其他组件、场景或舞台大小约束时,默认的大小调整机制是将所有组件的大小调整为其首选大小 从: 在构建过程中,应用程序可以初始化场景的大小。如果未指定大小,场景将根据其内容的首选大小自动计算其初始大小 工作如期进行 您提供的代码正如我所期望的那样工作—所有内容的大小都符合首选大小 没有一列的宽度如您的注释中所示为1000像素,因此您必须有一些额外的代码,以确保布局不符合您的要求。 示例程序 程序输出 网格宽度:137.0 图像宽度:128.0 框宽:9.0 框的宽度与第二个网格列的宽度匹配:trueJava 将VBox安装到父网格窗格,java,javafx,vbox,gridpane,Java,Javafx,Vbox,Gridpane,我有GridPane,它有两列:第一列包含固定大小的ImageView,第二列包含带有文本元素的VBox。我需要这个VBox来适应列宽。网格也有正确的尺寸,ImageView,但第二列中的VBox适合它所包含的文本,而不是父级(网格) 根据给定的示例,我希望“box”与“grid”对象的第二列具有相同的宽度。 如何解决这个问题 带绿色边框的容器:GridPane grid 浅蓝色边框的容器:VBox box GridPane具有红色背景,VBox具有粉色背景。您可以看到,它显然不适合它的父宽度
您可以将
Hgrow
设置为GridPane的子级。将HGrow
设置为始终
将允许它们占用可用的总宽度
由于box
是gridPane的子级,因此可以使用静态方法应用该属性
对于高度
的类似问题,您可以使用。请提供一个,例如FXML文件(如果您使用FXML)或Java代码(如果您未使用)。编辑内容。我希望现在很清楚,您希望VBox的宽度与图像视图的宽度相同吗?第二列是什么?根据提供的代码,VBox在第二列。我不相信您不理解我的问题。恐怕我不能使它更简单。。。第二列是GridPane的列,其中嵌套了VBox(grid.add(box,1,0);)。我希望VBox具有与此列相同的宽度。令人惊讶的是,我所说的列的宽度约为1000px,但放在其中的VBox的宽度为500px,因为它的宽度适合它所包含的文本对象。@PawełWójcik进行设置GridPane.setHgrow(框,Priority.Always)代码>为你工作?谢谢你的关注和帮助,我发现你的答案也很有用
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);
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.*;
import javafx.scene.layout.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class GridSample extends Application {
@Override
public void start(Stage stage) throws Exception {
VBox box = new VBox();
box.getChildren().addAll(new Text("1"), new Text("2"), new Text("3"));
box.setStyle("-fx-background-color: red;");
Image image = new Image(IMAGE_LOC);
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);
stage.setScene(new Scene(grid));
stage.show();
System.out.println("Grid width: " + grid.getWidth());
System.out.println("Image width: " + imgView.getLayoutBounds().getWidth());
System.out.println("Box width: " + box.getWidth());
final double secondColWidth =
grid.getWidth() - imgView.getLayoutBounds().getWidth();
System.out.println(
"Width of box matches width of second grid column: " +
(box.getWidth() == secondColWidth)
);
}
public static void main(String[] args) {
launch(args);
}
public static final String IMAGE_LOC =
"http://icons.iconarchive.com/icons/designbolts/thin-download/128/Download-from-Internet-icon.png";
// icon License: Linkware (Backlink to http://www.designbolts.com required)
}
Grid width: 137.0
Image width: 128.0
Box width: 9.0
Width of box matches width of second grid column: true
GridPane.setHgrow(box, Priority.Always);