gpt4 book ai didi

java - 创建静态类以在 Java FXML 中打开新窗口

转载 作者:行者123 更新时间:2023-12-02 06:13:56 24 4
gpt4 key购买 nike

我正在开发一个项目,其中有很多窗口被打开和关闭,并且想创建一个静态类,它只接受几个参数,然后执行其余的操作。

问题是“ Controller ”需要不同类型的声明,具体取决于需要什么 Controller 。例如; FXMLControllerAddFXMLControllerHome

我尝试使用参数将类型传递给方法。这不起作用,使用 var 作为声明(它是用 Java11 编码的)也不起作用,因为然后我在下一行的 initData() 中收到了“找不到符号”错误。

public static void nySide(Class c, String controllerPath, Dataset dataset, String tittel, Window window) {
try {
FXMLLoader loader = new FXMLLoader(c.getResource(controllerPath));
Parent root = (Parent) loader.load();

//THIS IS WHERE TO PROBLEM IS
FXMLControllerAdd controller = loader.getController();
controller.initData(dataset);

//This line gets the Stage information
Stage st = new Stage();
st.setTitle(tittel);
st.setScene(new Scene(root));

st.show();

Stage stage = (Stage) window;
stage.close();
} catch (Exception e) {
e.printStackTrace();
}
}

还有;是否存在另一种需要更少参数的方式?

最佳答案

多亏了沙拉,我才明白了这一点。创建一个接口(interface),例如(FXMLInitData)并在每个 FXMLController.java 中实现它,并将 Controller 声明为该接口(interface)就可以了。

界面:

public interface FXMLInitData {

public void initData(Dataset dataset);

}

方法:

public static void nySide(Class c, String controllerPath, Dataset dataset, String tittel, Window window){
try {
FXMLLoader loader = new FXMLLoader(c.getResource(controllerPath));
Parent root = (Parent) loader.load();

FXMLInitData controller = loader.getController();
controller.initData(dataset);

//This line gets the Stage information
Stage st = new Stage();
st.setTitle(tittel);
st.setScene(new Scene(root));

st.show();

Stage stage = (Stage) window;
stage.close();
} catch (Exception e) {
e.printStackTrace();
}
}

类(class):

public class FXMLControllerHome implements Initializable, FXMLInitData{
@Override
public void initData(Dataset dataset){

}
}

关于java - 创建静态类以在 Java FXML 中打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55884008/

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