Было бы очень удобно, если бы мы могли использовать процентные значения в CSS для ширины и высоты региона, но документация гласит:
Значения в процентах бесполезны, так как фактическое значение будет вычислено из ширины и / или высоты родительского объекта Regions до размещения родительского элемента.
Так есть ли обходной путь для этого? Я пытался использовать Platform.runLater
для запроса прохода макета после загрузки родителя на сцену, но ничего не произошло:
Main.java
public class Main extends Application {
public static void main(String... args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Scene scene = new Scene(FXMLLoader.load(getClass().getResource("main.fxml")));
scene.getStylesheets().setAll(getClass().getResource("styles.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
main.fxml
<StackPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="Controller">
<Region fx:id="child"
styleClass="child"/>
</StackPane>
styles.css
.root {
-fx-pref-width: 500px;
-fx-pref-height: 500px;
}
.child {
-fx-background-color: teal;
-fx-pref-width: 50%;
-fx-pref-height: 50%;
}
Controller.java
public class Controller implements Initializable {
@FXML
private Region child;
@Override
public void initialize(URL location, ResourceBundle resources) {
Platform.runLater(() -> if (child != null) child.requestLayout());
}
}