В JavaFX, атрибут для макета, чтобы изменить его высоту и ширину со стадией - PullRequest
0 голосов
/ 03 сентября 2018

Я создал Scene в SceneBuilder и хочу атрибут, который будет изменять высоту и ширину под-макета вместе с родительским. Я сделал это с помощью привязки в классе контроллера. Но это занимает много времени, чтобы применить привязку к каждому подуровню и контроллеру. Поэтому я хочу атрибут или комбинацию атрибутов, которые помогут мне сэкономить время и усилия при кодировании. У меня есть простой пример, который может помочь вам ответить на мой вопрос, где я просто поместил HBox в VBox.

Когда я разработал его в SceneBuilder:

enter image description here

А когда я делаю это на весь экран:

enter image description here

1 Ответ

0 голосов
/ 03 сентября 2018

Это зависит от родительского макета. Нет общего способа сделать это для каждого возможного макета.

Для VBox вы должны использовать VBox.vgrow (значение Priority.SOMETIMES для всех детей) и VBox, fillWidth, но вы не можете достичь этого для Pane, для AnchorPane это будет потребуйте, чтобы вы установили привязки, для GridPane ограничений столбца / строки с помощью percentWidth / percentHeight или можно использовать приоритеты роста ...

Пример для VBox / HBox

<VBox prefHeight="400.0" prefWidth="600.0">
   <children>
      <HBox style="-fx-background-color: green;" VBox.vgrow="SOMETIMES" />
      <HBox style="-fx-background-color: blue;" VBox.vgrow="SOMETIMES" />
      <HBox style="-fx-background-color: red;" VBox.vgrow="SOMETIMES" />
   </children>
</VBox>

Альтернативный способ создания привязок

Вы можете использовать привязку выражений для создания некоторых привязок. Смотри https://docs.oracle.com/javase/10/docs/api/javafx/fxml/doc-files/introduction_to_fxml.html#expression_binding

<VBox fx:id="vbox" fillWidth="false" prefHeight="400.0" prefWidth="600.0">
   <children>
      <HBox prefHeight="100.0" style="-fx-background-color: green;" VBox.vgrow="SOMETIMES" prefWidth="${vbox.width * 0.5}" />
      <HBox prefHeight="100.0" style="-fx-background-color: blue;" VBox.vgrow="SOMETIMES" prefWidth="${vbox.width * 0.5}" />
      <HBox prefHeight="100.0" style="-fx-background-color: red;" VBox.vgrow="SOMETIMES" prefWidth="${vbox.width * 0.5}" />
   </children>
</VBox>

Обратите внимание, что SceneBuilder будет отображать предупреждения и неправильно отображать предварительный просмотр, если вы используете этот подход.

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