怎样使用单例模式实现不同fxml文件的控制器的通信,请写出至少两个fxml文件的控制器,并实现一个控制器间对另一个控制器中成员的调用
时间: 2024-03-13 17:43:05 浏览: 25
好的,我会根据你的要求回答你的问题,不会透露你的任何要求。
单例模式可以保证一个类只有一个实例存在,因此可以用来实现不同fxml文件的控制器的通信。以下是两个fxml文件的控制器的示例代码:
第一个fxml文件的控制器:
```java
public class Controller1 {
private static Controller1 instance;
private String message;
private Controller1() {}
public static Controller1 getInstance() {
if (instance == null) {
instance = new Controller1();
}
return instance;
}
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
```
第二个fxml文件的控制器:
```java
public class Controller2 {
private Controller1 controller1;
public void setController1(Controller1 controller1) {
this.controller1 = controller1;
}
public void showMessage() {
System.out.println(controller1.getMessage());
}
}
```
在这个示例中,Controller1是一个单例类,用于存储需要在不同控制器之间共享的数据。Controller2中的setController1方法用于注入Controller1的实例,showMessage方法用于打印Controller1中存储的消息。
在实际使用中,可以在加载fxml文件时创建Controller1的实例并注入到Controller2中,或者在Controller1中添加一个静态方法用于获取实例并注入到Controller2中。
下面是一个示例代码:
```java
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader loader1 = new FXMLLoader(getClass().getResource("sample1.fxml"));
Parent root1 = loader1.load();
Controller1 controller1 = Controller1.getInstance();
loader1.setController(controller1);
FXMLLoader loader2 = new FXMLLoader(getClass().getResource("sample2.fxml"));
Parent root2 = loader2.load();
Controller2 controller2 = loader2.getController();
controller2.setController1(controller1);
primaryStage.setScene(new Scene(root2, 300, 275));
primaryStage.show();
controller1.setMessage("Hello World!");
controller2.showMessage();
}
public static void main(String[] args) {
launch(args);
}
}
```
在这个示例中,我们创建了一个Main类,用于加载两个fxml文件,并且在Controller1中设置了消息,然后调用Controller2中的showMessage方法打印消息。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)