gpt4 book ai didi

java - 如何在 JavaFX 中传递参数

转载 作者:行者123 更新时间:2023-12-01 11:30:23 30 4
gpt4 key购买 nike

所以,这有点令人困惑,但事情是这样的:

我用SceneBuilder创建了一个窗口,并创建了 Controller 和所有东西,窗口中有一个按钮。按钮 setOnAction() 方法使程序打开另一个窗口,问题是,这个另一个窗口是另一个类,我想将信息传递给这个另一个窗口,但似乎我不能。这是一些代码示例:

主窗口:

confirm.setOnAction(event->{
try {
LibraryWindowController lwc = new LibraryWindowController();
lwc.setDay(day.getValue());
lwc.setMonth(month.getValue());
lwc.setYear(Integer.parseInt(year.getText()));
lwc.setClient(login.getText());
lwc.start(new Stage());
} catch (Exception e) {
System.out.println("An error has occured!");
}
});

LibraryWindowController(变量和 setter ):

private int day, month, year;
private String client;

public void setDay(int day){
this.day = day;
}

public void setMonth(int month){
this.month = month;
}

public void setYear(int year){
this.year = year;
}

public void setClient(String login){
this.client = login;
}

问题是,在 Controller 的初始化方法中,有一个 System.out.println(client);问题是输出为空,那么为什么会发生这种情况以及如何修复它?

最佳答案

我建议您使用 fx:root 构造来防止此类问题。我发现它对构建应用程序有很大帮助。 FXML docs 的自定义组件部分对此进行了描述。 。如果您使用这种方法,您的所有屏幕/ Pane 都是 JavaFX 中某些 Pane 类的简单子(monad)类。由于 FXML 加载封装在类中,因此您可以简单地使用构造函数来创建新实例(请参阅我链接到的文档中的示例)并像设置任何对象一样设置它们。

例如(假设 MyPane 是您使用此方法设计的 Pane ):

MyPane mp = new MyPane();
mp.setWhatever(whatever);
Stage newWindow = new Stage();
newWindow.setScene(new Scene(mp));
newWindow.show();

您在 SceneBuilder 中需要更改的就是删除 Controller 类(您不再需要它,类 MyPane 本身成为 Controller )并选中“使用 fx:root”复选框。

有关如何使用 fx:root 的完整示例,请参阅 this example我为我的学生做的。它附带完整的源代码(在 GitHub 上)。

关于您的代码:您将 LibraryWindowController 称为 Controller ,但从它的外观来看,我认为它是一个应用程序?您不需要创建单独的应用程序来创建多个窗口。只需创建一个带有场景和根节点的新阶段即可。但是,您使用的步骤应该有效,即使不建议这样做。我猜测 login.getText() 返回 null 或者您的代码中其他地方有错误。

关于java - 如何在 JavaFX 中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30446878/

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