我正在构建一个Javafx gui应用程序,我正面临这个问题。我的程序有多个场景,所以我有不同的FXML文件和控制器类。问题是,在第一个“主菜单”(这是我的应用程序中弹出的第一个)场景中,在控制器的构造函数中,我调用了一些从数据库加载数据的重型方法等等。所以会发生什么。在接下来的场景中我确实有“主菜单按钮”,即切换到主菜单场景!所以每次我回到“主菜单”场景时,构造函数都会调用大量加载数据的方法。但我不想那样。我不想每次都调用这些方法,只在开始时调用一次。下面是一些简化的示例代码:
主菜单场景(控制器)
public class MainController {
@FXML
Button bt1 = new Button();
@FXML
Button bt2 = new Button();
@FXML
Button bt3 = new Button();
public static int choice=0;
//constructor
public MainController(){
try {
//heavy databse tasks here(loading data)
}catch (Exception e){
//error handling
}
}
@FXML
public void initialize(){}
}
public class Scene2Controller {
private Button mainMenu = new Button();
//constructor
public Scene2Controller(){}
@FXML
public void initialize(){}
public void goMainMenu(ActionEvent actionEvent) throws IOException {
Parent menu= FXMLLoader.load(getClass().getResource("/mainScene.fxml"));
Stage window = (Stage) mainMenu.getScene().getWindow();
window.getScene().setRoot(menu);
window.show();
}
}
因此,在第二个控制器中,我有一个侦听器方法,当按钮单击时,它会回到主菜单场景,加载适当的FXML文件。
我明白这对大多数人来说非常直接,但我是javafx的新手,我想知道是否有错误的操作切换场景,或者为了让mainMenu构造函数类中的这些方法只运行一次,我应该做不同的操作。这是可以获得的,还是我应该创建一个在主菜单场景之前运行的子控制器类?提前谢了。
在我的例子中,我必须调用几个方法,所以我只是从第一个场景控制器类中删除它们,并将它们添加到我的MainClass
中的start()
方法中,而不是在控制器类中。我认为@james_d的回答对于类似的问题来说是最好的。谢了!
问题内容: 我的课看起来像这样: 在FXMLLoader创建相应的控制器(在所给出的实例经由文件通过调用第一默认构造,然后)方法: 输出为: 那么,为什么存在这种方法呢?使用构造函数或方法初始化控制器所需的东西有什么区别? 问题答案: 简而言之:首先调用构造函数,然后@FXML填充所有带注释的字段,然后再调用。因此,构造函数无权访问引用文件中定义的组件的字段,而有权访问它们。 引用FXML简介:
我的类如下所示: 通过首先调用默认构造函数,然后调用方法,创建相应控制器的实例(在文件中通过给出): 输出为: 那么,为什么方法会存在呢?使用构造函数或方法初始化控制器所需的东西有什么区别? 谢谢你的建议!
显式复制构造函数不允许类似于的东西,并将复制使用强制为。此外,显式复制构造函数也不允许从函数中按值返回对象。然而,我尝试用大括号替换复制初始化,就像这样 我得到的错误(g 5.2) 错误:没有匹配的函数用于调用'Foo::Foo(Foo 或(叮当声) 错误:结构初始值设定项中的元素过多 删除使代码在g下可编译,但clang仍然会失败,并出现相同的错误(感谢@stophen)。这是怎么回事?统一初始
问题内容: 我有两个班,第一个是我的主班,第二个是我的编辑框架班。 我的第二个类(UpdateGUI)在其构造函数中提供oldName,并对其进行编辑,当我单击时,它将newName发送给我的第一个类。 我的第二堂课: 我的问题是,为什么newName为null? 更新: UpdateGUIDialog类: 输出: 我需要打印而不是null。 问题答案: Java对象有点像真实对象。并顾名思义:它
主要内容:初始化 const 成员变量构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用 初始化列表。 C++构造函数的初始化列表使得代码更加简洁,请看下面的例子: 运行结果: 小明的年龄是15,成绩是92.5 李华的年龄是16,成绩是96 如本例所示,定义构造函数时并没有在函数体中对成员变量一一赋值,其函数体为空(当然也可以有其他语句),而是在函数首部与函数体之间添
映射对构造函数没有限制或要求 (__init__ )类的方法。您可以自由地为您想要的函数要求任何参数,为ORM未知的实例分配属性,并且通常在编写Python类的构造函数时做您通常会做的任何其他事情。 sqlAlchemy ORM不调用 __init__ 从数据库行重新创建对象时。ORM的过程有点类似于Python标准库的 pickle 模块,调用低级 __new__ 方法,然后在实例上悄悄地恢复属