了解首选尺寸
当组件被放置在没有额外组件、场景或舞台尺寸限制的场景中时,默认的尺寸调整机制是将所有组件调整为它们的首选尺寸。
从场景 javadoc:
场景的大小可以在构建过程中由应用程序初始化。如果未指定大小,场景将根据其内容的首选大小自动计算其初始大小。
按预期工作
您提供的代码按我的预期工作 - 所有内容都调整为首选大小。
如您的评论中所示,没有一列是 1000 像素宽,因此您必须有一些额外的代码来确保布局不会像您希望的那样运行。
示例程序
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)
}
程序输出
网格宽度:137.0
图像宽度:128.0
箱宽:9.0
框的宽度与第二个网格列的宽度匹配:true