[英]Javafx Pane “forgets” layout
我有一個創建並返回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();
}
這是因為在調整舞台大小時,由於沒有任何支撐,因此TilePane也被調整為舞台的大小。
當您將其包裝在StackPane中時,它可以遵守最大值,因為StackPane會調整為新的舞台大小(在本示例中為600x600),而TilePane單獨放置在StackPane的中心為100X100。
由於您的舞台為600,因此不能將瓷磚窗格限制為100 ....
StackPane將布局以孩子為中心,這就是為什么它看起來正確的原因。 如果僅將其放在窗格上,則TilePane將位於左上角。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.