【问题标题】:JavaFX 8: How to automatically input a file on start-up?JavaFX 8:如何在启动时自动输入文件?
【发布时间】:2016-03-29 00:17:09
【问题描述】:

我在带有 SceneBuilder 的 IntelliJ 中使用 JavaFX 8 和 JDK 1.8.0_77。我创建了一个基本的像素编辑器应用程序。我有两个窗口(阶段)。一个是放置在网格窗格中的 32x128 圆形对象矩阵,另一个是 Main 中的消息中心。

您可以在以下位置看到消息中心窗口:https://virtualartsite.wordpress.com/message-center/

我想使用 Message Center 应用保存消息,并在同样为 32x128 的 RGB LED 矩阵上滚动它们。我将消息保存在 Message 对象的 ArrayList 中,然后编写 ArrayList's消息的 到序列化文件。我编写调用 writeObjArrayList () 的文件并输入调用 readObjArrayList() 的文件。

我能够成功地写入和读取文件,并将所有 Message 对象添加ArrayList 在启动时,用户可以编辑或删除 viewMessages 组合框中的任何消息。但到目前为止,我只能使用按钮事件调用 readObjArrayList()。这就是问题所在。

我想在应用启动时读取“幕后”文件。我想在程序启动时自动读取文件;用户不必点击按钮。

我最好的想法是使用以下代码,它可以编译但似乎不会执行任何代码:

    public void windowEvents(WindowEvent event){
    if(event.getSource() == viewMessages) readObjArrayList();
}

我认为 WindowEvent 会被 ComboBox 的 windowEvents=#OnShow 触发, viewMessages(FX:ID).

请指教。

感谢您的帮助。

【问题讨论】:

    标签: intellij-idea javafx-8 scenebuilder


    【解决方案1】:

    根据javadoc,WindowEvent 与Window 显示/隐藏动作有关。由于 Node 类不是 Windows,因此在其上安装 WindowEvent 处理程序不会有任何效果。

    由于您使用的是 SceneBuilder,我假设您必须有一个定义了 fx:controller 类的 FXML 文件。在任何控制器类中,您都可以添加一个非参数initialize() 方法,该方法将在处理完 FXML 文件后立即调用。

    public class YourController {
        @FXML
        ComboBox viewMessages;
    
        public void initialize() {
            readObjArrayList();
        }
    
        private void readObjArrayList() {
            ...
        }
    }
    

    【讨论】:

    • 这个最出色的解决方案第一次就奏效了。作为 Java 的新手,FYI 的背景和代码现在和将来都非常有用。谢谢。
    • @sgroen 提个醒,如果某个答案对您有所帮助,请通过接受答案来确认它(单击否决下方的勾号)。这将有助于将来遇到同样问题的用户。
    • @ItachiUchiha 感谢您的提示。
    猜你喜欢
    • 2014-01-24
    • 2018-08-04
    • 2012-05-23
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    相关资源
    最近更新 更多