在CSS中设置JavaFX Anchor Pane的锚点

时间:2016-08-08 13:23:39

标签: java css javafx fxml

我的GUI应用程序中的一个窗口包含类似的HBox,内部具有相同的控件。我想将所有内容都放在顶层窗格中(在本例中为Anchor Pane)。

以下是代码:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>

<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.Button?>

<AnchorPane xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1">
    <VBox fx:id="modeWindowPane" alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Current" />
                <TextField prefWidth="100.0" />
                <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/>
            </children>
        </HBox>
        <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Frequency" />
                <TextField prefWidth="100.0" />
                <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/>
            </children>
        </HBox>
        <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Fade In" />
                <TextField prefWidth="100.0" />
                <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/>
            </children>
        </HBox>
        <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Fade Out" />
                <TextField prefWidth="100.0" />
                <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/>
            </children>
        </HBox>
        <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <children>
                <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Offset" />
                <TextField prefWidth="100.0" />
                <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/>
            </children>
        </HBox>
        <HBox alignment="CENTER" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
            <Label contentDisplay="CENTER" maxHeight="1.7976931348623157E308" prefWidth="100.0" text="Stimulation Time" />
            <TextField prefWidth="100.0" />
            <Button maxHeight="1.7976931348623157E308" mnemonicParsing="false" text="Set Current"/>
        </HBox>
    </VBox>
</AnchorPane>

你可以看到每个HBox都有底部/左/右/顶部锚点。我想以某种方式对它们进行参数化,例如通过CSS在我的FXML文件中设置默认的HBox属性。但是当我开始寻找更多信息(教程,Oracle的引用,Stack)时,我没有找到任何有用的东西。

有人可以告诉我是否有任何方法我不必编辑每个组件,例如,以我想要的方式对齐它?此外,它必须符合MVC设计模式。

1 个答案:

答案 0 :(得分:1)

看一看 JavaFX CSS Reference Guide。在那里,您可以找到所有CSS属性的完整纪录片。据我所知,你不能通过CSS设置对象的锚点。

您可以通过控制器进行操作。只需在{\ n} fx:id中为所有项目分配,即可在控制器中分配它们。然后你可以迭代它们并设置锚点(例如AnchorPane.setTopAnchor(Node, Value))。有关详细信息,请参阅AnchorPane