繁体   English   中英

JavaFX FXML编辑不同类中的元素

[英]JavaFX FXML edit Elements in different Class

我有一个FXML文件,其中包含ButtonLabelTextField等所有元素。对于FXML文件,我有一个控制器类,可以在其中设置Label的文本,依此类推。

现在我有一个extern类,在这里我也需要更改ButtonLabel等等。 问题是,我无法将元素设置为static 那么,如何在其他班级进行更改?

我已经知道这里有类似的问题,但是没有什么真正帮助了我。 我将衷心感谢您的帮助。

XML文件

<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=""/>

Controller.java

@FXML private Label testLabel;

AnotherClass.java

testLabel.setText("This is a test");

Main.java

Main.primaryStage = primaryStage;
primaryStage.setTitle("Test Scene");
AnchorPane pane = FXMLLoader.load(Resource.onClassPath("MyScene.fxml").getURL());
Scene scene = new Scene(pane);
primaryStage.setScene(scene);

如果我在场景“ MyScene.fxml”中,然后单击一个按钮以导航到下一个场景

@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.");

但是,我建议您创建一个域模型并将该域模型传递给您的控制器实例,并使它将用户界面元素绑定到域模型元素。

假设你有MySceneControllerMyScene.fxmlExampleControllerExample.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM