当前位置: 首页 > 知识库问答 >
问题:

将变量从FXML转换为导入的FXML

曹茂材
2023-03-14

我目前正在为我的学习做一个Java(+使用MySQL)应用程序:一个Hopital的数据库

我使用JavaFX编写接口代码。我有一个主FXML(用于一般视图),其中有选项卡,在每个选项卡中,我使用(fx:include)导入另一个FXML。以便我的应用程序的每个模块都有自己的控制器和自己设计的视图。

如何将变量从主控制器传递给其他控制器?

谢谢!编辑:让我给你看我的代码

首先,这是我加载我的fxml的类(我首先在Connexion的窗口上,如果Connexion所需的信息是正确的,我就加载带有主接口的fxml Main),并且我将从我的fxml Connexion获得的Connexion(我需要发送的变量)设置为fxml Main

public class MainApp extends Application {

private Stage primaryStage;
private Connection conn;
MainController controllermain = new MainController();
//ConnexionController controllerconnex;

@Override
public void start(Stage primaryStage) throws Exception {
    this.primaryStage = primaryStage;
    this.primaryStage.setTitle("BASE DE L'HOPITAL DU ZOB");
    showConnexion();
}

public void showConnexion() {
    try {

        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("Connexion.fxml"));
        Parent page = (AnchorPane) loader.load();
        Scene scene = new Scene(page);

        primaryStage.setScene(scene);
        primaryStage.show();

        ConnexionController controller = loader.getController();
        controller.setMainApp(this);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void showMainApp(Connection conn) {
    try {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("Main.fxml"));
        AnchorPane page = (AnchorPane) loader.load();
        Scene scene = new Scene(page);
        primaryStage.setScene(scene);
        primaryStage.show();
        this.conn = conn;

        controllermain = loader.getController();
        controllermain.setMainApp(this);
        controllermain.setConnexion(conn); // I want to send the variable conn to the others

    } catch (IOException e) {
        e.printStackTrace();
    }
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

这是我的主控制器,你可以看到,我得到的变量connexion只与set方法,然后我可以把它发送到另一个控制器

public class MainController implements Initializable {


private MainApp mainApp;
private Button retour;
protected Connection conn;


FXML AchorPane ;

   public MainController() {
}

@Override
public void initialize(URL url, ResourceBundle rb) {

}    


 public void setMainApp(MainApp mainApp) {
    this.mainApp = mainApp;


}

 public void setConnexion(Connection conn){

 this.conn=conn;

     }
public void handleRetour(){
                       mainApp.showConnexion();


    }
 }     


}

共有1个答案

南门鸿雪
2023-03-14

您只需要在对应于“主”fxml的控制器中引用对应于包含的fxml的控制器。您可以使用嵌套控制器机制来完成此操作。

简而言之,如果您有一个带有 标记的“main”fxml,请将fx:id添加 :

main.fxml:

<!-- imports etc -->

<!-- root element, e.g. BorderPane -->
<BorderPane fx:controller="com.example.MainController" xmlns="..." ... >

<!-- ... -->

<fx:include source="tab.fxml" fx:id="tab" />

<!-- ... -->
</BorderPane>
public class MainController {

    @FXML
    private TabController tabController ;

    private Connection conn ;

    // other injected fields, etc...

    public void setConnexion(Connection conn) {
        this.conn = conn ;
        // pass Connection to TabController:
        tabController.setConnexion(conn);
    }
}

现在,只需在TabController中定义一个setConnexion(...)方法(如果还没有),以接收Connection对象(并更新它需要更新的任何结果)。

 类似资料:
  • 我有一组Swagger文件,它以通常的方式定义参数。例如: 在将这些文件导入到Postman中时,Postman集合就被正确地创建了,但是我希望“authorization”参数的Postman变量为“auth_token”而不是“authorization”(例如)。 实际上,我希望声明一个字段(理想情况下是在swagger文件中?)即“当导出到Postman时,使用值AUTH_TOKEN作为变

  • 转换为json格式。

  • 我有一个 netcdf 数据文件,其中包含以下变量,显示在下面的 ncdump 代码段中: 我正在尝试从此文件中消除时间坐标变量,以便获得三维 netcdf 数据文件。基本上在netcdf文件中第一次拥有数据数据值,仅此而已。我试图用 ncks 完成此操作,这就是他们在进行谷歌搜索时显示我应该做的事情。我用 ncks 尝试了以下命令: 但我无法删除时间维度。我应该怎么做才能调整此命令以获得仅显示初

  • 问题内容: 我想将python变量名称转换为等效的字符串,如图所示。有什么想法吗? 问题答案: TL; DR:不可能。参见最后的“结论”。 在一个使用场景中,您可能需要此场景。我并不是在暗示没有更好的方法或实现相同的功能。 为了在调试,模式和其他类似情况下出现错误时“转储”任意词典列表,这将很有用。 需要的是该功能的反向功能: 它将以标识符名称(“变量”,“字典”等)作为参数,并返回包含标识符名称

  • 我有一个问题,我已经在stackoverflow上问了几次,我已经尝试了所有这些问题,没有一个有效。所以我很想在另一个时间总结这个问题,并试着更准确地描述它。 我正在构建一个应用程序,将图片发送到python后端,以获得xcode swift中的图像识别结果。 我正在使用Alamofire上传,这里是上传部分: 下面是我从服务器端得到的json响应: 所以,我想要达到的目的,就是打印第一个预言的名

  • 问题内容: 我有一个函数,其输入参数可以是一个元素或元素列表。如果此参数是单个元素,则将其放在列表中,以便可以以一致的方式遍历输入。 目前我有这个: 我正在使用现有的API,因此无法更改输入参数。使用isinstance()感觉很麻烦,所以有 适当的 方法吗? 问题答案: 我喜欢Andrei Vajna的建议。请注意以下一些典型的Python类型的结果: 这具有将字符串视为不可重复的额外优势-字符