gpt4 book ai didi

JavaFX 将正确的数据从一个 Controller 返回到另一个 Controller

转载 作者:行者123 更新时间:2023-12-01 09:53:04 25 4
gpt4 key购买 nike

我有两个 Controller 。一个 Controller 管理大部分主要功能,另一个 Controller 控制一个简单的弹出提示,可从主 Controller 访问。

这是存储在主 Controller 中的函数,用于访问提示符。

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");
}
}

这是提示 Controller

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 文件的 block 。

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();
}
}
}

除了一件事之外,一切都正常。主 Controller 从提示 Controller 获取结果时没有得到正确的 boolean 结果。

按下删除键时的输出:

D
Canceled

按下取消时的输出:

C
Canceled

D 后面应该是已删除。

任何事情都有帮助。

最佳答案

FXMLLoader 创建一个新的 Controller 实例,因为 fxml 中提供了 fx:controller 属性。

你基本上有两个选择:

  1. 从 fxml 中删除 fx:controller 属性并自行指定 Controller :

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

  2. 获取由FXMLLoader创建的 Controller

    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;
    }

关于JavaFX 将正确的数据从一个 Controller 返回到另一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37478859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com