Я работаю над игрой javafx, и макет такой, какой я хочу.
Однако макет применяется только после изменения размера окна из-за привязок к ширине и высоте. Когда приложение запускается или когда оно свернуто или развернуто, макет испортился.
После того, как макет испорчен, просто изменив его размер, можно привести его в нормальное состояние.
Я пытался прослушать события максимизации и минимизации и использовать те же методы обновления, которые я использовал при изменении размера, но это не сработало.
primaryStage.maximizedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
gamePane.updatePlayerPanes();
}
});
Я действительно потерян. Я перепробовал много вещей, но не работал, макет продолжает портиться, когда свернут или развернут.
Только началось:
https://prnt.sc/jf2akp
После небольшого изменения размера:
http://prntscr.com/jf2b19
В основном я использую GridPane и StackPane для средней панели.
Любые идеи приветствуются.
Edit:
Это простой класс, имитирующий задачу
Только началось: http://prntscr.com/jfb4lm
После небольшого изменения размера: http://prntscr.com/jfb4ud
package test;
import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Test extends Application
{
@Override
public void start(Stage primaryStage)
{
BorderPane bp = new BorderPane();
GridPane gp = new GridPane();
gp.prefHeight(500);
gp.prefWidth(500);
for (int i = 0; i < 5; i++) {
gp.getColumnConstraints().add(new ColumnConstraints(50, 50, Double.MAX_VALUE, Priority.ALWAYS, HPos.CENTER, true));
}
for (int i = 0; i < 5; i++) {
gp.getRowConstraints().add(new RowConstraints(50, 50, Double.MAX_VALUE, Priority.ALWAYS, VPos.CENTER, true));
}
bp.setCenter(gp);
//Simulate the center pane
StackPane centerPane = new StackPane();
centerPane.setStyle("-fx-background-color: Green");
//Add a bunch of cards
for(int i =0; i < 10; i++)
{
Image img = new Image("file:AS_.png");
ImageView imgView = new ImageView(img);
imgView.setPreserveRatio(true);
imgView.fitHeightProperty().bind(centerPane.heightProperty().divide(2));
imgView.setRotate(Math.random()*180);
centerPane.getChildren().add(imgView);
}
gp.add(centerPane, 1, 1, 3, 3);
Scene scene = new Scene(bp, 300, 300);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
Есть ли способ заставить изменить размер или что-то?