JavaFX-масштабирование внутренних элементов панели

Когда я увеличиваю окно, внутренние элементы остаются прежнего размера.

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

Main.fxml:

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

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane cacheHint="SCALE_AND_ROTATE" focusTraversable="true" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
     <TableView fx:id="finalTable" layoutX="27.0" layoutY="358.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="190.0" prefWidth="766.0" />
     <Label layoutX="27.0" layoutY="21.0" prefHeight="25.0" prefWidth="149.0" text="   Quell-Datei" />
     <TableView fx:id="sourceTable" editable="true" layoutX="27.0" layoutY="50.0" maxHeight="900.0" maxWidth="900.0" minHeight="-Infinity" minWidth="-Infinity" prefHeight="190.0" prefWidth="766.0" />
     <Label layoutX="27.0" layoutY="329.0" prefHeight="25.0" prefWidth="149.0" text="   Konvertierte-Datei" />
     <Button fx:id="linkBtn" layoutX="313.0" layoutY="282.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#linkAction" prefHeight="30.0" prefWidth="90.0" text="Verbinden" />
     <Button fx:id="splitBtn" layoutX="437.0" layoutY="282.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#splitAction" prefHeight="30.0" prefWidth="90.0" text="Trennen" />
     </children>
</AnchorPane>

Я работаю со SceneBuilder 2.0 и также пытался "привязать" кнопку
(см. здесь: http://i.imgur.com/GZyL5xC.png)
...но масштабирование совершенно неправильное (см. здесь: http://i.imgur.com/hmMi1p3.png)

Я перерыл весь интернет в поисках ответа, но не нашел ничего, что могло бы помочь.


person InfernoVol    schedule 23.07.2015    source источник
comment
Для этого можно использовать другой макет. Не используйте AnchorPane, используйте макет, который дает вам возможность увеличивать ваши элементы управления при изменении их размера, например: GridPane или VBox.   -  person ItachiUchiha    schedule 24.07.2015
comment
Мне нужна панель, в которой я могу перемещать элементы, куда хочу, но в GridPane и VBox это невозможно?   -  person InfernoVol    schedule 24.07.2015
comment
Это возможно. Если вы используете макет, который автоматически выравнивает свое содержимое, вы всегда можете использовать translateProperty() для перемещения элементов.   -  person ItachiUchiha    schedule 24.07.2015
comment
@ItachiUchiha Это путь в ад :-) Менеджеры макетов созданы для выполнения этой работы. Просто используйте их.   -  person aw-think    schedule 24.07.2015
comment
@NwDx Я считаю, что OP хочет иметь дополнительную функциональность, то есть свободно перемещать (или перетаскивать) элементы управления на сцене. Может быть, я неправильно понял требование. ;)   -  person ItachiUchiha    schedule 24.07.2015


Ответы (1)


Ну, ваш макет обычно представляет собой макет VBox. Если ваши окна не имеют фиксированного размера, это будет хорошим решением, потому что ваши кнопки остаются на той же высоте и в центре вашего окна. TableViews увеличиваются и уменьшаются по мере изменения размера окна. Как ты хочешь.

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

<?import javafx.geometry.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


<VBox xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
     <Label prefHeight="25.0" prefWidth="149.0" text="   Quell-Datei" VBox.vgrow="NEVER" />
     <TableView fx:id="sourceTable" editable="true" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
      <Label />
      <HBox alignment="CENTER" prefHeight="61.0" prefWidth="766.0" spacing="20.0" VBox.vgrow="NEVER">
         <children>
           <Button fx:id="linkBtn" maxHeight="-Infinity" maxWidth="-Infinity" mnemonicParsing="false" onAction="#linkAction" prefHeight="30.0" prefWidth="90.0" text="Verbinden" HBox.hgrow="NEVER" />
           <Button fx:id="splitBtn" maxHeight="-Infinity" maxWidth="-Infinity" mnemonicParsing="false" onAction="#splitAction" prefHeight="30.0" prefWidth="90.0" text="Trennen" HBox.hgrow="NEVER" />
         </children>
      </HBox>
     <Label prefHeight="25.0" prefWidth="149.0" text="   Konvertierte-Datei" VBox.vgrow="NEVER" />
     <TableView fx:id="finalTable" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS" />
   </children>
   <padding>
      <Insets bottom="15.0" left="15.0" right="15.0" top="15.0" />
   </padding>
</VBox>
person aw-think    schedule 24.07.2015
comment
спасибо за код :) .. можете ли вы сказать мне, что делает ‹padding›...‹/padding›? - person InfernoVol; 24.07.2015
comment
Это как внутренний невидимый каркас. Таким образом, компоненты не касаются полей. - person aw-think; 24.07.2015