Javafx组件应始终位于AnchorPane的中心

时间:2016-05-11 08:15:08

标签: java javafx fxml scenebuilder

我希望我的Javafx组件(如标签,单独包装在VBox中的TextFields)保留在窗口的中心,即使它已调整大小。看到attatched Images。目前,这些组件包含在anchorPane中。 FXML文件代码如下。请告诉我如何做到这一点。感谢。

Martijn Pieters excellent answer to "Why is 1000000000000000 in range(1000000000000001) so fast in Python 3?"

Image for small size window where components are in middle.

Assert.assertEquals("Twitter",driver.getTitle().trim())

2 个答案:

答案 0 :(得分:6)

你应该把你喜欢的所有东西放在一个组中间。然后你把你的组放在StackPane中。这样,您的组始终处于StackPane的中心。根据需要定义StackPane的大小,或者只是将其绑定到AnchorPane父级,如示例所示:

它应该在fxml:

中变成这样的东西
    <AnchorPane>
       <children>
          <StackPane AnchorPane.bottomAnchor="0.0" AnchorPane.left...>
             <children>
                <Group StackPane.alignment="CENTER">
                   <children>
                      ...       
                    </children>
                 </Group>
              </children>
            </StackPane>
          </children>
     </AnchorPane>

这应该可以解决你的问题。

答案 1 :(得分:0)

我很快将它们放在一起。在您的代码中有许多AnchorPanes,中间的表单元素位于不同的位置,我认为这使得一切都变得更难。相反,我使用了GridPane:

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

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

<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <MenuBar>
            <menus>
                <Menu text="Account">
                    <items>
                        <MenuItem fx:id="menuItemCreate" text="Create" />
                        <MenuItem fx:id="menuItemUpdate" text="Update" />
                        <MenuItem fx:id="menuItemDelete" text="Delete" />
                        <MenuItem fx:id="menuItemLedger" text="Ledger" />
                    </items>
                </Menu>
                <Menu text="In Stock">
                    <items>
                        <MenuItem fx:id="menuItemAddItem" text="Add items" />
                        <MenuItem fx:id="menuItemInventory" text="Inventory" />
                    </items>
                </Menu>
                <Menu text="Reports">
                    <items>
                        <MenuItem fx:id="menuItemSalesReport" text="Sales report" />
                        <MenuItem fx:id="menuItemProfitReport" text="Profit report" />
                        <MenuItem fx:id="menuItemRcvables" text="Receivables" />
                    </items>
                </Menu>
            </menus>
        </MenuBar>
        <BorderPane VBox.vgrow="ALWAYS">
            <top>
                <Label text="Create a new customer account" BorderPane.alignment="CENTER">
                    <font>
                        <Font name="Arial Narrow Bold" size="17.0" />
                    </font>
                    <BorderPane.margin>
                        <Insets />
                    </BorderPane.margin>
                </Label>
            </top>
            <center>
                <GridPane alignment="TOP_CENTER" hgap="10.0" vgap="5.0">
                    <columnConstraints>
                        <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" percentWidth="0.0" />
                        <ColumnConstraints hgrow="SOMETIMES" percentWidth="0.0" />
                    </columnConstraints>
                    <rowConstraints>
                        <RowConstraints />
                        <RowConstraints />
                        <RowConstraints />
                        <RowConstraints />
                    </rowConstraints>
                    <children>
                        <Label text="Label">
                            <GridPane.margin>
                                <Insets />
                            </GridPane.margin>
                        </Label>
                        <Label text="Label" GridPane.rowIndex="1" />
                        <Label text="Label" GridPane.rowIndex="2" />
                        <Label text="Label" GridPane.rowIndex="3" />
                        <TextField GridPane.columnIndex="1" />
                        <TextField GridPane.columnIndex="1" GridPane.rowIndex="1" />
                        <TextField GridPane.columnIndex="1" GridPane.rowIndex="2" />
                        <TextField GridPane.columnIndex="1" GridPane.rowIndex="3" />
                    </children>
                    <BorderPane.margin>
                        <Insets top="15.0" />
                    </BorderPane.margin>
                </GridPane>
            </center>
            <VBox.margin>
                <Insets top="15.0" />
            </VBox.margin>
        </BorderPane>
    </children>
</VBox>

如果您想要使用顶部和/或底部重新调整大小,可以调整边距。

注意:正如我在代码中看到的,有很多不可见的对象。我不知道他们是故意的还是只是死代码。在我的例子中,我只创建了可见的东西。