У меня есть функция, которая создает и возвращает Pane, которая хранится в другом месте. Это отображается, когда пользователь нажимает кнопку.Javafx 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 первых, я получаю это:
Почему выполняет ли стек стека мою проблему, и что нужно сделать для обеспечения правильного отображения всех панелей? Это ожидаемое поведение?
Если я использую
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();
}
Возможно, подробно описав, что такое «стек стек», поможет ответить на это? – Clemens
Можете ли вы создать [MCVE]. Я не думаю, что есть много надежды ответить на ваш вопрос с ограниченным контекстом, который вы дали. –
Я добавил указанный пример под изменениями. – Catch44