Изменение размера TableView, когда стадия развернута

Я пытаюсь изменить размер двух таблиц на панели привязки, когда сцена развернута, чтобы иметь ту же пропорцию, что и размеры сцены по умолчанию.

Теперь у меня есть это:

https://i.imgur.com/Z6Lywhr.png

Но когда он максимизирован, между ними много места:

https://i.imgur.com/NZa5wY0.png

Я искал и нашел ответы на похожие вопросы, говорящие о том, чтобы обернуть сетку, но даже так я не могу этого сделать:

размер табличного представления JavaFX изменяется в соответствии с размером окна

Кто-то знает, чего здесь не хватает?

Код fxml:

<AnchorPane styleClass="backgroundColor" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="solverassistant.FXMLCompareController">
    <children>
        <AnchorPane prefHeight="270" prefWidth="190.0" styleClass="filterPane" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="40.0">
            <children>
                <Label id="filterLabel" fx:id="filterLabel" alignment="CENTER" prefHeight="17.0" prefWidth="150.0" text="Filter" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="10.0" />
                <TextField id="filterTextField" fx:id="filterTextField" alignment="CENTER" layoutY="20.0" prefWidth="150.0" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="30.0" />
                <Label id="filterByLabel" fx:id="filterByLabel" alignment="CENTER" prefHeight="17.0" prefWidth="150.0" text="Filter by:" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="70.0" />
                <CheckBox id="solverCheckBox" fx:id="solverCheckBox" layoutY="90.0" selected="true" text="Solver" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="100.0" />
                <CheckBox id="benchmarkCheckBox" fx:id="benchmarkCheckBox" layoutY="110.0" selected="true" text="Benchmark" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="120.0" />
                <CheckBox id="typeCheckBox" fx:id="typeCheckBox" layoutY="130.0" selected="true" text="Solver type" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="140.0" />
                <CheckBox id="timeOutCheckBox" fx:id="timeOutCheckBox" layoutY="150.0" selected="true" text="Time out" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="160.0" />
                <CheckBox id="memoryCheckBox" fx:id="memoryCheckBox" layoutY="170.0" selected="true" text="Memory" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="180.0" />
                <CheckBox id="coresCheckBox" fx:id="coresCheckBox" layoutY="190.0" selected="true" text="Number of cores" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="200.0" />
                <CheckBox id="wholeWordCheckBox" fx:id="wholeWordCheckBox" layoutY="190.0" selected="false" text="Whole word" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="220.0" />
            </children>
        </AnchorPane>
        <Button id="reloadButton" fx:id="reloadButton" onAction="#resetAndReloadSolvers" prefHeight="25.0" prefWidth="190.0" styleClass="button-defaultButton" text="Reset and reload data" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="320.0" />
        <Button id="compareButton" fx:id="compareButton" disable="true" prefHeight="25.0" prefWidth="150.0" styleClass="button-defaultButton" text="Compare" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="40.0" />
        <TableView id="allSolversTable" fx:id="allSolversTable" minHeight="-Infinity" prefHeight="175.0" prefWidth="922.0" AnchorPane.leftAnchor="245.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="40.0">
            <columnResizePolicy>
                <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
            </columnResizePolicy>
            <columns>
                <TableColumn fx:id="colAllSelect" prefWidth="25.0" />
                <TableColumn fx:id="colAllSolver" prefWidth="75.0" text="Solver" />
                <TableColumn fx:id="colAllBenchmark" prefWidth="75.0" text="Benchmark" />
                <TableColumn fx:id="colAllSolverType" prefWidth="75.0" text="Solver type" />
                <TableColumn fx:id="colAllTimeOut" prefWidth="75.0" text="Time out" />
                <TableColumn fx:id="colAllMemory" prefWidth="75.0" text="Memory" />
                <TableColumn fx:id="colAllNumberOfCores" prefWidth="75.0" text="Number of cores" />
            </columns>
        </TableView>
        <TableView id="selectedSolversTable" fx:id="selectedSolversTable" minHeight="-Infinity" prefHeight="175.0" prefWidth="922.0" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="245.0" AnchorPane.rightAnchor="0.0">
            <columnResizePolicy>
                <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
            </columnResizePolicy>
            <columns>
                <TableColumn fx:id="colSelectedSolver" prefWidth="75.0" text="Solver" />
                <TableColumn fx:id="colSelectedBenchmark" prefWidth="75.0" text="Benchmark" />
                <TableColumn fx:id="colSelectedSolverType" prefWidth="75.0" text="Solver type" />
                <TableColumn fx:id="colSelectedTimeOut" prefWidth="75.0" text="Time out" />
                <TableColumn fx:id="colSelectedMemory" prefWidth="75.0" text="Memory" />
                <TableColumn fx:id="colSelectedNumberOfCores" prefWidth="75.0" text="Number of cores" />
            </columns>
        </TableView>
    </children>
</AnchorPane>

Весь проект: github.com/danielcasanovas/SolverAssistant


person Community    schedule 29.10.2014    source источник


Ответы (1)


Одна простая вещь, которую вы можете сделать, это просто обернуть обе таблицы в VBox, пусть первая таблица имеет приоритет вертикального роста, установленный как ALWAYS, и установите USE_COMPUTE_SIZE во всех полях минимального/предварительного/максимального размера. Вторая таблица может быть такой, как была (поэтому будет изменен размер только первой).

Это затронутая часть файла FXML:

<VBox spacing="40.0" AnchorPane.bottomAnchor="40.0" AnchorPane.leftAnchor="245.0" AnchorPane.rightAnchor="40.0" AnchorPane.topAnchor="40.0">
     <children>
          <TableView id="allSolversTable" fx:id="allSolversTable" VBox.vgrow="ALWAYS">
              <columnResizePolicy>
                  <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
              </columnResizePolicy>
              <columns>
                  <TableColumn fx:id="colAllSelect" prefWidth="25.0" />
                  <TableColumn fx:id="colAllSolver" prefWidth="75.0" text="Solver" />
                  <TableColumn fx:id="colAllBenchmark" prefWidth="75.0" text="Benchmark" />
                  <TableColumn fx:id="colAllSolverType" prefWidth="75.0" text="Solver type" />
                  <TableColumn fx:id="colAllTimeOut" prefWidth="75.0" text="Time out" />
                  <TableColumn fx:id="colAllMemory" prefWidth="75.0" text="Memory" />
                  <TableColumn fx:id="colAllNumberOfCores" prefWidth="75.0" text="Number of cores" />
              </columns>
          </TableView>
          <TableView id="selectedSolversTable" fx:id="selectedSolversTable" prefHeight="175.0">
              <columnResizePolicy>
                  <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
              </columnResizePolicy>
              <columns>
                  <TableColumn fx:id="colSelectedSolver" prefWidth="75.0" text="Solver" />
                  <TableColumn fx:id="colSelectedBenchmark" prefWidth="75.0" text="Benchmark" />
                  <TableColumn fx:id="colSelectedSolverType" prefWidth="75.0" text="Solver type" />
                  <TableColumn fx:id="colSelectedTimeOut" prefWidth="75.0" text="Time out" />
                  <TableColumn fx:id="colSelectedMemory" prefWidth="75.0" text="Memory" />
                  <TableColumn fx:id="colSelectedNumberOfCores" prefWidth="75.0" text="Number of cores" />
              </columns>
          </TableView>
     </children>
  </VBox>

Без дальнейших изменений в вашем основном файле fxml размер таблицы должен измениться правильно после любого изменения размера приложения.

person José Pereda    schedule 29.10.2014
comment
Для проблем с макетом обычно пригодятся VBox и HBox. Ваш проект действительно выглядит хорошо до сих пор. - person José Pereda; 29.10.2014
comment
Я сделаю это, большое спасибо. Можно ли вырастить все? Нравятся метки в HBox? - person ; 29.10.2014
comment
Обычно у вас есть некоторые элементы управления с фиксированными размерами и всего несколько элементов управления с изменяемым размером, но вы можете настроить все элементы некоторого контейнера так, чтобы они всегда увеличивались, и их размер будет изменяться в той же пропорции. - person José Pereda; 29.10.2014
comment
Да, я вижу это, потому что, например: ‹Выравнивание HBox=CENTER spacing=20.0AnchorPane.topAnchor=10.0› ‹children› ‹Label id=solverLabel fx:id=solverLabelalignment=CENTER prefHeight=17.0 prefWidth=125.0 text=Solver/› ‹Ярлык id=benchmarkLabel fx:id=benchmarkLabelalignment=CENTER prefHeight=17.0 prefWidth=125.0 text=Benchmark HBox.hgrow=ВСЕГДА /› ‹/children› ‹/HBox› не увеличивайте метки, как вы сказали, я должен положить его раньше в другой контейнер, не так ли? - person ; 30.10.2014
comment
Метки не увеличиваются (это означает, что текстовый шрифт не масштабируется вверх/вниз, а его фиксированная ширина не изменяется), и если вы установите ширину для использования вычисленного размера, эта ширина является минимальной, необходимой для отображаемой строки, и она не тоже не растут. Таким образом, обернув каждую метку в HBox, установив для этого поля постоянное увеличение, будет работать, как только вы обернете все эти поля внутри внешнего HBox. - person José Pereda; 30.10.2014
comment
Хорошо, я понял, очень помогли ваши объяснения! - person ; 30.10.2014