在控制器类外部动态访问/遍历/操作从FXML创建的JavaFX节点
有人能帮帮我吗。我是JavaFX和FXML的新手,我已经尝试了无数个小时,试图做一些没有任何运气的事情。 有人能给我看一个代码的工作示例吗 1加载一个FXML,该FXML包含嵌套在不同窗格和节点中数层深处的节点,如标签和按钮 2遍历整个场景,列出标签和按钮等节点 3将Java代码耦合到一个节点,比如label和button,这样我就可以在为FXML定义的控制器类之外更改它的属性,比如它的label和内容 我的目标是使用场景生成器构建UI,然后能够动态更改场景的内容,并向其中添加其他节点。我的问题是我无法到达场景/舞台中的对象 下面是我一直在使用的部分代码。这些评论暗示了我的想法 寻找 //在控制器类外部动态访问/遍历/操作从FXML创建的JavaFX节点,javafx,fxml,Javafx,Fxml,有人能帮帮我吗。我是JavaFX和FXML的新手,我已经尝试了无数个小时,试图做一些没有任何运气的事情。 有人能给我看一个代码的工作示例吗 1加载一个FXML,该FXML包含嵌套在不同窗格和节点中数层深处的节点,如标签和按钮 2遍历整个场景,列出标签和按钮等节点 3将Java代码耦合到一个节点,比如label和button,这样我就可以在为FXML定义的控制器类之外更改它的属性,比如它的label和内容 我的目标是使用场景生成器构建UI,然后能够动态更改场景的内容,并向其中添加其他节点。我的问题
必须递归地获取根容器中的所有节点:
public void start(Stage stage) throws Exception {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Sample.fxml"));
Parent root = (Parent)fxmlLoader.load();
List<Node> allNodes = getAllNodes(root);
for(Node node : allNodes) {
// do some stuff…
}
…
}
private List<Node> getAllNodes(Parent container) {
List<Node> nodes = new ArrayList<Node>();
for(Node node : container.getChildrenUnmodifiable())
{
nodes.add(node);
if (node instanceof Parent) {
Parent subContainer = (Parent) node;
nodes.addAll( getAllNodes(subContainer) );
}
}
return nodes;
}
您可以访问@FXML字段,例如控制器的TableView,就像您已经访问过的一样…:-
此外,TableView中还有一个获取列的方法,例如controller.TableView.getColumns
只需全局保存控制器的一个实例,就可以从任何地方访问它
干杯请发布一个FXML示例和您想要的输出。
public void start(Stage stage) throws Exception {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Sample.fxml"));
Parent root = (Parent)fxmlLoader.load();
List<Node> allNodes = getAllNodes(root);
for(Node node : allNodes) {
// do some stuff…
}
…
}
private List<Node> getAllNodes(Parent container) {
List<Node> nodes = new ArrayList<Node>();
for(Node node : container.getChildrenUnmodifiable())
{
nodes.add(node);
if (node instanceof Parent) {
Parent subContainer = (Parent) node;
nodes.addAll( getAllNodes(subContainer) );
}
}
return nodes;
}