gpt4 book ai didi

Javafx Pane "forgets"布局

转载 作者:行者123 更新时间:2023-11-30 07:56:12 26 4
gpt4 key购买 nike

我有一个创建并返回 Pane 的函数,该 Pane 存储在其他地方。当用户按下按钮时会显示此信息。

public Pane createBoard(Board d){
TilePane tilepane = new TilePane();
pane.setPrefColumns(8);
pane.setPrefRows(8);
pane.setMaxSize(400,400);
pane.setMinSize(400,400);

for(Cell c : d.getCells()){
pane.getChildren().add(c);
}

return tilepane;
}

将此对象传递到场景会返回:

enter image description here

但是,如果我先将其添加到 StackPane,我会得到以下结果:

enter image description here

为什么堆栈 Pane “修复”了我的问题,以及应该采取什么措施来确保所有 Pane 都能正确表示?这是预期的行为吗?

如果我使用

Pane tilepane = createBoard(new Board());
StackPane stackpane = new StackPane();
stackpane.getchildren().add(tilepane);
Scene scene = new Scene(stackpane,600,600);

我得到了预期的结果。

如果我使用:

Pane tilepane = createBoard(new Board());
Scene scene = new Scene(tilepane,600,600);

我得到了第一张图片。

<小时/>

编辑:

一个StackPane基本上将所有子节点直接放在彼此之上。在这个问题的上下文中,我使用的 StackPane 只有一个子元素,即 TilePane。

示例:

非工作:

 public void start(Stage primaryStage) {   

TilePane tp = new TilePane();
tp.setPrefColumns(5);
tp.setPrefRows(5);
tp.setMaxSize(100, 100);

ArrayList<Rectangle> rectangles = new ArrayList();

for(int i = 0;i<25;i++){
rectangles.add(new Rectangle(20,20));
}

for(int i = 0;i<25;i++){
rectangles.get(i).setFill(Color.rgb(i*2, i*9, i*6));
}
tp.getChildren().addAll(rectangles);

Scene scene = new Scene(tp, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}

工作:

 public void start(Stage primaryStage) {   


TilePane tp = new TilePane();
tp.setPrefColumns(5);
tp.setPrefRows(5);
tp.setMaxSize(100, 100);

ArrayList<Rectangle> rectangles = new ArrayList();

for(int i = 0;i<25;i++){
rectangles.add(new Rectangle(20,20));
}

for(int i = 0;i<25;i++){
rectangles.get(i).setFill(Color.rgb(i*2, i*9, i*6));
}
tp.getChildren().addAll(rectangles);

StackPane stack = new StackPane(); <-- Added
stack.getChildren().add(tp); <--Added
Scene scene = new Scene(stack, 600, 600); <-- Changed to stack from tp
primaryStage.setScene(scene);
primaryStage.show();
}

最佳答案

这是因为当您调整舞台大小时,TilePane 也会调整为舞台的大小,因为没有任何东西支撑它。

当您将其包装在 StackPane 中时,它可以遵循最大值,因为 StackPane 将调整大小到新的舞台大小(在本例中为 600x600),而 TilePane 则单独保持在 100X100 的位置,以 StackPane 为中心。

由于您的阶段为 600 - 平铺 Pane 不能限制为 100....

StackPane 将以子元素为中心进行布局,这就是它看起来正确的原因。如果您仅将其放置在 Pane 上,那么您的 TilePane 将位于左上角......

希望这有帮助。

关于Javafx Pane "forgets"布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32639726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com