有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将JavaFXML对象分组在一起

特别描述性和信息性的回答将从我这里获得价值50英镑的赏金

我正在用JavaFX开发一个应用程序,对于视图,我使用FXML

<AnchorPane id="AnchorPane" fx:id="dashboard" prefHeight="400.0" prefWidth="600.0" stylesheets="@css/dashboard.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.hassanalthaf.telemart.viewmodels.DashboardViewModel">
   <children>
      <MenuBar maxWidth="600.0" minWidth="600.0" prefWidth="600.0">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Help">
            <items>
              <MenuItem mnemonicParsing="false" text="About" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
      <AnchorPane fx:id="home" layoutY="29.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="371.0" prefWidth="600.0" />
      <AnchorPane fx:id="about" layoutY="29.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="371.0" prefWidth="600.0" />
      <AnchorPane fx:id="users" layoutY="29.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="371.0" prefWidth="600.0" />
   </children>
</AnchorPane>

正如您所看到的,这个代码段包含一些<AnchorPane>,ID为homeaboutusers。这些是我申请的单独页面。要操作这些窗格,我必须将它们注入到我的代码中,如下所示:

@FXML
private AnchorPane home;

@FXML
private AnchorPane about;

@FXML
private AnchorPane users;

这可能看起来很整洁,但当超过20页时,它可能看起来有点凌乱和乏味。是否有任何方法可以以干净高效的方式将它们分组到一个数组或其他东西中


共 (1) 个答案

  1. # 1 楼答案

    可以使用^{}^{}将元素放置在List和场景图中,并将列表注入控制器:

    <AnchorPane id="AnchorPane" fx:id="dashboard" prefHeight="400.0" prefWidth="600.0" stylesheets="@css/dashboard.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.hassanalthaf.telemart.viewmodels.DashboardViewModel">
       <fx:define>
            <!  create panes and store them in a list  >
            <ArrayList fx:id="panes">
                <AnchorPane fx:id="home" layoutY="29.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="371.0" prefWidth="600.0" />
                <AnchorPane fx:id="about" layoutY="29.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="371.0" prefWidth="600.0" />
                <AnchorPane fx:id="users" layoutY="29.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="371.0" prefWidth="600.0" />
            </ArrayList>
        </fx:define>
        <children>
            <MenuBar maxWidth="600.0" minWidth="600.0" prefWidth="600.0">
                <menus>
                    <Menu mnemonicParsing="false" text="File">
                        <items>
                            <MenuItem mnemonicParsing="false" text="Close" />
                        </items>
                    </Menu>
                    <Menu mnemonicParsing="false" text="Help">
                        <items>
                            <MenuItem mnemonicParsing="false" text="About" />
                        </items>
                    </Menu>
                </menus>
            </MenuBar>
            <!  add panes in the list to scene graph  >
            <fx:reference source="home"/>
            <fx:reference source="about"/>
            <fx:reference source="users"/>
        </children>
    </AnchorPane>
    

    控制器

    @FXML
    private List<AnchorPane> panes;