[英]JavaFX FXML edit Elements in different Class
我有一个FXML文件,其中包含Button
, Label
, TextField
等所有元素。对于FXML文件,我有一个控制器类,可以在其中设置Label
的文本,依此类推。
现在我有一个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);
现在,“示例”场景具有一个控制器。 我需要从第三类访问控制器的元素.. :)
不必让FXMLoader构造您的控制器类,您可以将控制器对象传递给FXMLLoader
的实例。 这使您可以将控制器实例传递给其他对象,然后后者可以调用控制器的方法来执行其所需的任何操作。
Controller controller = ....;
FXMLLoader loader = new FXMLLoader(Resource.onClassPath("MyScene.fxml").getURL());
loader.setController(controller);
AnchorPane pane = loader.load();
controller.setTestLabel("This is a test.");
但是,我建议您创建一个域模型并将该域模型传递给您的控制器实例,并使它将用户界面元素绑定到域模型元素。
假设你有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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.