【发布时间】:2015-09-17 20:49:38
【问题描述】:
我有一个创建和返回 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;
}
将此对象传递给场景会返回:
然而,如果我先将它添加到 StackPane,我会得到:
为什么 stackpane 会“修复”我的问题,应该做些什么来确保所有窗格都能正确显示?这是预期的行为吗?
如果我使用
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();
}
【问题讨论】:
-
也许详细描述什么是“堆栈窗格”有助于回答这个问题?
-
你能创建一个minimal reproducible example。我认为在您提供的有限背景下回答您的问题的希望不大。
-
我在编辑下添加了上述示例。