当前位置: 首页 > 知识库问答 >
问题:

JavaFX和FXML。对组件的引用何时加载到controller类中?

沃博裕
2023-03-14

我有一个非常简单的fxml文件,带有一个复选框:

...
<AnchorPane id="AnchorPane" xmlns:fx="http://javafx.com/fxml" fx:controller="jfx01.T01">
...
<CheckBox fx:id="checkBox1" text="CheckBox" />
...

非常简单的controller类如下:

public class T01 extends Application {

    @FXML protected CheckBox checkBox1;

    @Override
    public void start(Stage primaryStage) throws IOException {
         Parent root = FXMLLoader.load(getClass().getResource("t01.fxml"));   
         primaryStage.setScene(new Scene(root));
         primaryStage.show();

         //here, here is the problem!
         System.out.println("checkBox1==null? "+ (checkBox1==null?"yes":"no"));

    }
}
checkBox1==null? yes
    @FXML protected void handleButton1Action(ActionEvent event) {
        System.out.println("button pressed");
        checkBox1.setSelected(!checkBox1.isSelected());
    }

共有1个答案

郭翰翮
2023-03-14

控制器应该实现javafx.fxml.initializable并覆盖initialize(URL arg0,ResourceBundle res)方法。checkbox1将被初始化,并可由FXMLLoader在initialize方法中使用。方便的方法是将Controller和Main(扩展Application)类分开,因此app Start/Entry point和FXML文件Controller应该是两个不同的类。

 类似资料:
  • 但是使用此代码会出现冲突,因为我已经用FXML代码定义了项目中的控制器,要解决这一问题,删除FXML代码中的段就足够了,但是我不会这么做,因为将代码留在FXML中允许我访问SceneBuilder的一些好特性。

  • 我一直在做一个桌面应用程序,在那里我需要使用JavaFX。我在使用Scene Builder构建的eclipse上的JavaFX项目中创建了各种FXML文件。除了这个讨厌的文件(fxmlimglist.FXML)外,我加载任何FXML文件都没有问题。 其主要思想是,当按下一个按钮时,会出现一个新窗口。下面是该按钮的事件处理程序的代码: package explorer中的项目如下所示: https

  • 我需要创建许多不同的FXML文件,每个文件都有一个一致的布局。每一个都有一个锚烷,可以容纳不同的内容物。 有没有办法加载一个“基本”FXML文件,然后加载第二个FXML文件,并将数据路由到第一个FXML文件? 例如,FXML#1有一个边框。FXML#2有一个按钮,文本字段,标签等。如何加载#1,然后加载#2作为#1的孩子?

  • 我的应用程序有选项卡式窗格,所以为了保持fxml文件的可管理性,我有一个包含选项卡的主fxml文件,并为每个其他选项卡单独设置一个fxml。这很好,但出于某种原因,应用程序已经停止加载第二个标签。我试着在主应用程序中单独加载它,效果很好。我尝试创建一个新的fxml文件作为测试,并加载它,这也是有效的。但是,它不会将其加载到第二个选项卡中。此外,控制台没有输出。 第二个: 很抱歉代码太长,并提前感谢

  • 我在相应的控制器中有一个用FXML创建的窗口,我有一个按钮,当单击特定的按钮时,它会加载一个小框。这个盒子也是使用FXML设计的。 当我加载盒子并想把它添加到窗口中时,我得到这个错误: 这是我的代码: 主窗口FXML: 我要动态创建的框的FXML: