javafx 将 FXML 属性移动到单独的类/bean

javafx moving FXML properties to a separateclass / bean

我有一个简单的应用程序,其元素在 .FXML 文件中定义

<TextField fx:id="httpsPort" promptText="text1" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<TextField fx:id="adminPort" promptText="text2" GridPane.columnIndex="1" GridPane.rowIndex="2" />

到目前为止我正在这样做

public class Controller {
    public TextField httpsPort;
    public TextField adminPort;

    //getters and setters here
}

但我想在控制器中执行此操作

public class Controller {

    //maybe some magic annotation here
    public Layout layout;

    //the rest of the code
}


public class Layout {

    public TextField httpsPort;
    public TextField adminPort;

}

所以基本上,我想使用一些注释、xml 配置等将连接到布局的属性分离到另一个 class。是否有任何已知的方法来实现此目的?

使用<fx:include>:

ports.fxml:

<GridPane fx:controller="com.mycompany.Layout">

    <TextField fx:id="httpsPort" promptText="text1" GridPane.columnIndex="1" GridPane.rowIndex="1" />
    <TextField fx:id="adminPort" promptText="text2" GridPane.columnIndex="1" GridPane.rowIndex="2" />

</GridPane>

然后 main.fxml:

< ... fx:controller="com.mycompany.MainController">
    <!-- ... -->
    <fx:include fx:id="layout" source="ports.fxml"/>
    <!-- ... -->

你的MainController可以做到:

public class MainController {

    @FXML
    private Layout layoutController ; // field name is fx:id with "Controller" appended

}

Layout

public class Layout {

    @FXML
    private TextField httpsPort;
    @FXML
    private TextField adminPort;

}

有关详细信息,请参阅 Nested Controllers 上的文档部分(或本网站上的许多类似问题)。