我有一个包含Button
s,Label
s,TextField
等所有元素的FXML文件。对于FXML文件,我有一个控制器类,我可以在其中设置Label
s的文本,等等。
现在我有一个extern课程,我需要更改Button
,Label
等。问题是,我无法将元素设置为static
。那么如何在不同的班级中改变它们呢?
我已经知道这里有类似的问题,但没有什么能真正帮助我。我非常感谢你的帮助。
<AnchorPane fx:id="root" prefHeight="1000" prefWidth="1000"
xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="Controller">
<Label fx:id="testLabel" layoutX="150" layoutY="200" text=""/>
@FXML private Label testLabel;
testLabel.setText("This is a test");
Main.primaryStage = primaryStage;
primaryStage.setTitle("Test Scene");
AnchorPane pane = FXMLLoader.load(Resource.onClassPath("MyScene.fxml").getURL());
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
@FXML AnchorPane root;
AnchorPane pane = FXMLLoader.load(Resource.onClassPath("Example.fxml").getURL());
root.getChildren().setAll(pane);
现在“示例”场景有一个控制器。我需要从第三类访问Controller的元素.. :))
答案 0 :(得分:0)
您可以将控制器对象传递给 Controller controller = ....;
FXMLLoader loader = new FXMLLoader(Resource.onClassPath("MyScene.fxml").getURL());
loader.setController(controller);
AnchorPane pane = loader.load();
controller.setTestLabel("This is a test.");
的实例,而不是让FXMLoader必须构建您的控制器类。这允许您将控制器实例传递给其他对象,然后该对象可以调用控制器的方法来执行他们需要的任何操作。
for member in Member.objects.all():
stat = MatchResult.objects.filter(member__id=member.id).aggregate(Avg('wins'))['wins__avg']
但是,我建议创建一个域模型并将该域模型传递给控制器实例,并将用户界面元素绑定到域模型元素。
答案 1 :(得分:0)
假设您MySceneController
有MyScene.fxml
,ExampleController
有Example.fxml
在MyScene
点击某个按钮后,您可以像这样访问ExampleController
FXMLLoader loader = new FXMLLoader(getClass().getResource("Example.fxml"));
AnchorPane pane = loader.load();
ExampleController exampleController = loader.getController();
exampleController.getLabel().setText("hello"); // if you have corresponding getters for element
// or if element is public
exampleController.label.setText("hello");
// similary you can pass exampleController to other class and access its element in the other class (as you asked in question)
new OtherClass(exampleController);
root.getChildren().setAll(pane);