Grouping together JavaFX FXML Objects

╄→尐↘猪︶ㄣ 提交于 2019-11-26 07:49:13

问题


Exceptionally descriptive and informative answers will get a bounty worth 50 reputation from me.

I am developing an application in JavaFX, and for views, I use 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>

As you can see, this snippet contains some <AnchorPane>s with the IDs home, about, users. These are separate pages of my application. To manipulate those Panes, I have to inject them to my code like this:

@FXML
private AnchorPane home;

@FXML
private AnchorPane about;

@FXML
private AnchorPane users;

This may look neat for now, but when there is more than 20 pages, it may look a bit messy and tedious. Is there any way to group them into an array or something in a clean and efficient way?


回答1:


You could use fx:define and fx:reference to place the elements in a List and in the scene graph and inject the list to the controller:

<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>

Controller

@FXML
private List<AnchorPane> panes;


来源:https://stackoverflow.com/questions/34469447/grouping-together-javafx-fxml-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!