Если я вас правильно понимаю, ваши цели:
- Сохранить соотношение сторон изображения.
- Покройте всю область изображением (то есть без пробелов с любой стороны).
Вместо использования ImageView
я рекомендую установить фон вашего Region
в качестве вашего изображения. Затем вы можете установить размер фонового изображения на cover , что будет:
[...] масштабируйте изображение, сохраняя его внутреннее соотношение сторон (если оно есть), до наименьшего размера, чтобы его ширина и высота могли полностью покрывать область позиционирования фона.
Установка фона возможна программно, через CSS или через FXML.
В Java:
Image image = ...;
BackgroundImage bgImage = new BackgroundImage(
image, // image
BackgroundRepeat.NO_REPEAT, // repeatX
BackgroundRepeat.NO_REPEAT, // repeatY
BackgroundPosition.CENTER, // position
new BackgroundSize(-1, -1, false, false, false, true) // size
);
anchorPaneBackground.setBackground(new Background(bgImage));
В CSS (см. Справочное руководство по JavaFX CSS ):
/* Or whatever ID/style class you give the target region */
#achorPaneBackground {
-fx-background-image: url("your/image/path");
-fx-background-size: cover;
-fx-background-position: center;
-fx-background-repeat: no-repeat;
}
В FXML (не могу обещать, что это максимально кратко):
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Background?>
<?import javafx.scene.layout.BackgroundImage?>
<?import javafx.scene.layout.BackgroundPosition?>
<?import javafx.scene.layout.BackgroundSize?>
<AnchorPane xmlns="http://javafx.com/javafx/12" xmlns:fx="http://javafx.com/fxml/1">
<background>
<Background>
<images>
<BackgroundImage repeatX="NO_REPEAT" repeatY="NO_REPEAT">
<image>
<Image url="your/image/path"/>
</image>
<position>
<BackgroundPosition fx:constant="CENTER"/>
</position>
<size>
<BackgroundSize cover="true"/>
</size>
</BackgroundImage>
</images>
</Background>
</background>
</AnchorPane>
Примечание: я не верю, что вы можете установить фон Region
в Scene Builder (кроме как путем добавления таблицы стилей). Пожалуйста, поправьте меня, если я ошибаюсь.