Как получить представление для заполнения оставшейся ширины в JavaFX

Я использую fxml в JavaFX, и я хочу список мастера / подробный вид. Список слева от фиксированного размера и деталь TextArea, где ширина увеличивается с размером окна.

Это мой fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1280.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <MenuBar prefWidth="671.0" BorderPane.alignment="CENTER">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Edit">
            <items>
              <MenuItem mnemonicParsing="false" text="Delete" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Help">
            <items>
              <MenuItem mnemonicParsing="false" text="About" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </top>
   <center>
      <HBox BorderPane.alignment="CENTER">
         <children>
            <ListView prefHeight="754.0" prefWidth="236.0" />
            <TextArea />
         </children>
      </HBox>
   </center>
</BorderPane>

Этот пример fxml выглядит так:

Вы можете видеть, что список правильный, а textArea отображается и увеличивается по высоте, но не по ширине.

РЕДАКТИРОВАТЬ

Изменено из-за ответа.

Это полный код сейчас. Я только изменил максимальную ширину и высоту -Infinity на -1, но все равно не повезло.

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>

<BorderPane maxHeight="-1" maxWidth="-1" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1280.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
    <top>
        <MenuBar prefWidth="671.0" BorderPane.alignment="CENTER">
            <menus>
                <Menu mnemonicParsing="false" text="File">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Close" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Edit">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Delete" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Help">
                    <items>
                        <MenuItem mnemonicParsing="false" text="About" />
                    </items>
                </Menu>
            </menus>
        </MenuBar>
    </top>
    <center>
        <HBox BorderPane.alignment="CENTER">
            <children>
                <ListView prefHeight="754.0" prefWidth="236.0" />
                <TextArea />
            </children>
        </HBox>
    </center>
</BorderPane>

2 ответа

Решение

Установить HBox.hgrow свойство текстовой области:

<TextArea HBox.hgrow="ALWAYS"/>

Значение отрицательной бесконечности - это константа USE_PREF_SIZE, которая означает, что вы BorderPane никогда не будет больше, чем его предпочтительный размер (который в вашем случае 1280x800).

Изменение максимальной ширины и высоты на USE_COMPUTED_SIZE (-1) должно решить вашу проблему. Поскольку это значение по умолчанию, вы можете просто удалить maxHeight а также maxWidth атрибутов.

Другие вопросы по тегам