Как вписать размер фона в размер окна в javafx? - PullRequest
0 голосов
/ 26 февраля 2019

Я попытался сделать размер фона в качестве размера окна.но это довольно придирчиво.Я не использовал формат файла css.

это часть main для реализации окна.

public void start(Stage primaryStage) throws Exception {
    GameLoopManager loop = GameLoopManager.instance();
    Controller controller = new Controller(loop, primaryStage);
    loop.start(new MenuState());
    primaryStage.show();

    primaryStage.setFullScreen(true);


}

и это части тела для реализации фона и сцены.

private UISubScene optionSubScene;
private UISubScene helpSubScene;
private UISubScene creditsSubScene;
private UISubScene buttonChooserScene;

private UISubScene sceneToHide;

List<UIButton> menuButtons;

List<ButtonPicker> buttonsList;

private BUTTON chosenButton;

public MenuViewManager(Stage mainStage) {
    sound.backgroundMusic();
    menuButtons = new ArrayList<>();
    mainPane = new AnchorPane();
    mainScene = new Scene(mainPane);
    mainScene.setFill(null);
    mainStage.setScene(mainScene);

    super.mainStage = mainStage;

    createSubScenes();
    createButtons();
    createBackground();
    createLogo();

    super.mainStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
        public void handle(WindowEvent we) {
            controller.stop();
        }
    });
    // mainStage.show();

}

private void createBackground() {
    Image backgroundImgae = new Image("main/resources/images/jxoPOUxa.gif",true);
    BackgroundImage background = new BackgroundImage(backgroundImgae, BackgroundRepeat.NO_REPEAT,
            BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT, BackgroundSize.DEFAULT);        
    mainPane.setBackground(new Background(background));


}

Я устал использовать BackgroundSize.AUTO, но не могу.что я должен сделать, чтобы получить решение?

Если я могу использовать формат css, как это использовать?но я не могу переписать и пересмотреть множество кодов, потому что мой почти готов, и я интегрирую и отлаживаю.

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы хотите растянуть изображение, чтобы заполнить все Region, вы должны использовать:

// Side note: Are you sure having "main/resources" in the path is correct?
var image = new Image("main/resources/images/jxoPOUxa.gif", true);
var bgImage = new BackgroundImage(
        image,
        BackgroundRepeat.NO_REPEAT,
        BackgroundRepeat.NO_REPEAT,
        BackgroundPosition.DEFAULT,
        new BackgroundSize(1.0, 1.0, true, true, false, false)
);
mainPain.setBackground(new Background(bgImage));

Два true аргумента BackgroundSize означают width и height аргументысоответственно пропорциональны, а не абсолютны.В таком случае width и height должны находиться в диапазоне [0.0, 1.0], иначе называемом от 0% до 100%.Два false аргумента - contain и cover, соответственно.Для использования аргументов width и height они должны быть false.Другими словами, это говорит JavaFX, чтобы изображение заполняло 100% ширины и высоты Region.Обратите внимание, что это не будет поддерживать соотношение сторон изображения (см. Ниже).

См. Документацию BackgroundSize для получения дополнительной информации:

Определяетразмер области, которую BackgroundImage должен заполнить относительно области, которую он разрабатывает.Есть несколько свойств, значения которых имеют приоритет над другими.В частности, есть 4 ключевых свойства: width, height, contain и cover.Ширина и высота не зависят друг от друга, однако оба взаимодействуют с содержимым и обложкой.

Из спецификации CSS cover определяется как:

  • Масштабировать изображение, асохраняя его внутреннее соотношение сторон (если оно есть) до наименьшего размера, так что его ширина и высота могут полностью покрывать область позиционирования фона.

contain определяется как:

  • Масштабируйте изображение, сохраняя его внутреннее соотношение сторон (если оно есть), до максимального размера, чтобы его ширина и высота могли поместиться в области позиционирования фона.

ИШирина и высота указывают (в абсолютных значениях или процентах) используемый размер.Эти два свойства применяются только в том случае, если оба покрытия и содержат ложные значения.Если оба покрытия и содержат значение true, то будет использоваться покрытие.

Ширина и высота также могут быть установлены на AUTO, указывая на то, что область должна быть измерена так, чтобы использовать собственный размер изображения, илиесли это не может быть определено, 100%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...