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 上的文档部分(或本网站上的许多类似问题)。
我有一个简单的应用程序,其元素在 .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 上的文档部分(或本网站上的许多类似问题)。