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

JavaFX:initialize()方法未在自定义组件上调用

公冶俊达
2023-03-14
<fx:root type="javafx.scene.layout.HBox" xmlns:fx="http://javafx.com/fxml" spacing="5">
  <ImageView fx:id="image" preserveRatio="true" fitWidth="60" />
  <VBox alignment="center">
    <Text text="notification" />
    <Label fx:id="title" />
    <Label fx:id="content" />
    <Label fx:id="timestamp" />
  </VBox>
</fx:root>
public class NotificationItem extends HBox {
    public static final String FXML_FILENAME = "NotificationItem.fxml";

    @FXML private ResourceBundle resources;  
    @FXML private ImageView image;
    @FXML private Label title;
    @FXML private Label content;
    @FXML private Label timestamp;

    private Notification notification; 
    private AbstractModel associatedModel;

    public NotificationItem(Notification notification) {
        this.notification = notification;
        this.associatedModel = notification.getAssociatedModel();

        FXMLHelper.loadFxml("/com/github/norbo11/topbuilders/fxml/" + FXML_FILENAME, this, this);
    }

    @FXML
    public void initialize() {      
        System.out.println(notification.getType());

        switch (notification.getType()) {
            case ASSIGNMENT_CLOSE_TO_END:
                break;
            case EMPLOYEE_ASSIGNMENT_COMPLETE:
                break;
            case NEW_ASSIGNMENT:
                break;
            case NEW_MESSAGE:
                Message message = (Message) associatedModel;
                title.setText(resources.getString("home.notifications.new_message"));
                content.setText(resources.getString("messages.sender") + ": " + message.getSender());
                break;
            case NEW_QUOTE_REQUEST:
                break;
        }

        timestamp.setText(Util.formatDate(notification.getDate()));
    }
}
public static LoadedFXML loadFxml(String filename, Object root, Object controller) {
        Log.info("Loading FXML: " + filename);
        Parent loadedRoot = null;
        AbstractController loadedController = null;

        try {
            FXMLLoader loader = new FXMLLoader(Main.getApp().getClass().getResource(filename));
            if (root != null) loader.setRoot(root);
            if (controller != null) loader.setController(controller);

            if (!filename.equals(LoginScene.getAbsoluteFxmlFilename())) {
                Employee user = Employee.getCurrentEmployee();

                //If the user is logged in
                if (user != null) {
                    Locale locale = Employee.getCurrentEmployee().getSettings().getLocale();
                    loader.setResources(ResourceBundle.getBundle("lang.lang", locale, ClassLoader.getSystemClassLoader()));
                }
            }

            if (root == null) loadedRoot = loader.load();
            if (controller == null) loadedController = loader.getController();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new LoadedFXML(loadedRoot, loadedController);
    }

共有1个答案

陶树
2023-03-14

我可能搞错了,因为我不能测试代码的大部分,但我认为proolem在这里:

public static LoadedFXML loadFxml(String filename, Object root, Object controller) {

    if (root == null) loadedRoot = loader.load();
}

因为您是从构造函数调用:

public NotificationItem(Notification notification) {
    FXMLHelper.loadFxml(FXML_FILENAME, this, this);
}

root不会为空,并且不会加载FXML文件。事实上,您有相反的设置根前几行。

if (root != null) loadedRoot = loader.load();
 类似资料:
  • 我在layout/XML中创建了一个自定义组件,它有两个文本视图和两个按钮。在它的支持类中,我只是让按钮递增和递减其中一个TextView的值 接下来,我创建了另一个包含5或6个复合组件的XML布局 在此布局的支持类(扩展活动)中,我设置了复合组件变量setContentView(),并尝试以下操作: 我收到一个错误声明-无法启动活动组件信息)。我只有在调用setLabel()时才会出现此错误。

  • 我正在编写一组定制的PrimeFaces组件,使用PrimeFaces5.0,并在JBoss EAP6.2中运行。 null 2.2在myFaceStest.taglib.xml中,我定义了输入标记: 2.3在input.java(我的自定义组件)中,我执行以下操作: 2.4此组件的呈现器包含以下内容: 给定这种设置,为什么自定义组件不会呈现?我的jboss日志中没有任何内容,即使日志级别设置为d

  • 问题内容: 我正在尝试对页面登录进行编码,但在此错误中我处于停止状态 PLIZ在这里告诉我错了事 问题答案: 用于准备的语句。例如 您正在尝试直接在主数据库对象上执行查询。对于PDO,这意味着 您确实应该研究准备好的语句。您很容易受到SQL注入攻击的影响,并且由于您从一开始就使用PDO,因此不编写安全查询基本上是不可原谅的。

  • 问题内容: 这是我的代码: 我在最后一行收到以下错误: 调用未定义的方法mysqli_stmt :: get_result() 这是conn.php的代码: 如果我写这行: 打印 “未准备的声明” 。如果我直接在IDE中运行查询替换?用值标记,效果很好。请注意,$ conn对象在项目中的其他查询中可以正常工作。 请帮忙....... 问题答案: 请阅读此方法的用户说明: http://php.ne

  • 我正在使用JSF 2.0创建页面: 我期待在单击复选框时被调用。但是,加载页面时调用一次setMyCheckboxValue()。 如果我写 每次点击都会收到警报。 我的问题是:当我收到警报时,为什么每次onclick事件都不调用? 注意:我也尝试过AJAX,但复选框保持不变。

  • 我正在使用javaFX,我需要把自定义组件放到我的场景中。因此,我有“main_pane.fxml”,网格窗格包含我的组件(例如文档模块)。 它们都在单独的fxml文件中定义。 问题是DocumentModul在构建后没有初始化。它的构造函数被调用,但它的初始化(URL位置、资源包资源)方法没有被调用。因此fxml中的对象没有被注入。 } 对于MainPane,一切正常,但对于任何内部组件都不正常