JavaFX从一个控制器向另一个控制器返回正确的数据

杰克斯顿

我有两个控制器。一个控制器管理大多数主要功能,另一个控制从主控制器访问的简单弹出提示。

这是存储在主控制器中的功能,用于访问提示。

public void deletePrompt(){
    DeletePromptController controller = new DeletePromptController();
    boolean result = controller.showPrompt("/MainWindow//DeletePrompt.fxml");
    if(result){
        System.out.println("Deleted");
    }else{
        System.out.println("Canceled");
    }
}

这是提示控制器

public class DeletePromptController extends ShowWindow {
    public Label question;
    public Button delete, cancel;
    private boolean result = true;

    boolean showPrompt(String path){
        showWindow(path);
        return result;
    }

    public void delete(){
        System.out.println("D");
        result = true;
        Stage stage = (Stage) delete.getScene().getWindow();
        stage.close();
    }

    public void cancel(){
        System.out.println("C");
        result = false;
        Stage stage = (Stage) cancel.getScene().getWindow();
        stage.close();
    }
}

这是用于加载和显示删除提示fxml文件的块。

public class ShowWindow {
    public void showWindow(String path){
        try {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(path));
            Parent root = fxmlLoader.load();
            Stage stage = new Stage();
            stage.initModality(Modality.APPLICATION_MODAL);
            stage.setScene(new Scene(root));
            stage.showAndWait();
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
}

除了一件事,一切都在工作。从提示控制器获取结果时,主控制器未获取正确的布尔结果。

按下删除时的输出:

D
Canceled

按下取消时的输出:

C
Canceled

D之后应是Deleted。

任何帮助。

法比安

FXMLLoader创建一个新的控制器实例,因为该fx:controller属性在fxml中提供。

您基本上有2个选择:

  1. fx:controller从fxml中删除该属性,然后自己指定控制器:

    public void showWindow(String path){
        try {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(path));
            fxmlLoader.setController(this);
            Parent root = fxmlLoader.load();
    

    或者

  2. 获取由创建的控制器 FXMLLoader

    public static <T> T showWindow(String path){
        try {
            FXMLLoader fxmlLoader = new FXMLLoader(ShowWindow.class.getResource(path));
            Parent root = fxmlLoader.load();
            Stage stage = new Stage();
            stage.initModality(Modality.APPLICATION_MODAL);
            stage.setScene(new Scene(root));
            stage.showAndWait();
            return fxmlLoader.getController();
        }catch(IOException ex){
            ex.printStackTrace();
        }
        return null;
    }
    
    boolean showPrompt(String path) {
        return ShowWindow.<DeletePromptController>showWindow(path).result;
    }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用present模态从一个uiviewcontroller向另一个导航控制器发送数据

从一个控制器读取数据到另一个

从一个视图控制器向另一个视图控制器传递数据时发生错误

JavaFx控制器将对象设置为另一个控制器

如何从一个视图控制器弹出到另一个视图控制器

如何从一个控制器到另一个控制器共享阵列

从一个控制器到另一个控制器的SWRevealViewController

如何从一个控制器访问变量到另一个控制器

从一个控制器到另一个控制器访问jmeter中的数组

从一个视图控制器从另一个视图控制器加载函数

将值从一个控制器传递到另一个控制器

将UIView从一个控制器保留到另一个控制器

Codeigniter3 从一个控制器移动到另一个控制器

如何将数据从一个视图控制器传递到另一个视图控制器,并且在视图控制器之间有一个显示视图控制器

如何通过控制器返回另一个控制器的局部视图?

快速使用委托从一个视图控制器向另一个视图控制器发送字符串

将模型从一个控制器传递到另一个

如何使用 JavaFX 将对象从一个控制器传递到另一个控制器

从另一个控制器触发一个控制器的“动作”

快速将数据从一个选项卡控制器传递到另一个

如何将数据从一个视图控制器传递到另一个?

无法将数据从一个控制器移动和跟踪到另一个angularjs

通过$ rootScope将数据从一个控制器传递到另一个

如何将数据从一个视图控制器传递到另一个SWIFT

如何在Rails中将数据从一个模型/控制器发送到另一个模型/控制器

无法使用Segue Swift 5将数据从一个控制器传递到另一个控制器

从AngularJS如何将数据从一个控制器+模板传递到另一个控制器+模板?

在我的情况下,如何将数据从一个控制器传递到另一个控制器

最佳做法是将列表数据从一个控制器传输到另一个控制器