Есть ли обходной путь для использования процентных значений для ширины и высоты региона в CSS? - PullRequest
2 голосов
/ 06 июня 2019

Было бы очень удобно, если бы мы могли использовать процентные значения в 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());
  }
}
...