我在使用SceneBuilder的IntelliJ中使用JavaFX 8和JDK 1.8.0_77。我创建了一个基本的像素编辑器应用我有两个窗口(阶段)。一个是放置在网格窗格中的32x128圆形对象矩阵,另一个是Main中的消息中心。
您可以在以下位置看到消息中心窗口:https://virtualartsite.wordpress.com/message-center/
我想使用 消息中心 应用保存消息,然后将它们滚动到也是32x128的RGB LED矩阵上。我将消息保存在 消息 对象的 ArrayList<> 中,然后我写了 ArrayList的消息 到序列化文件。我编写了调用 writeObjArrayList()的文件并输入调用 readObjArrayList()的文件。
我能够成功地写入和读取文件, .add 所有 消息 对象 ArrayList启动时 ,以便用户可以编辑或删除 viewMessages ComboBox中的任何消息。但到目前为止,我只能使用按钮事件来调用 readObjArrayList() 。这就是问题所在。
我想在应用程序启动时阅读“幕后”文件。我想在程序启动时自动读取文件;用户不必点击按钮。
我最好的想法是使用以下代码编译但似乎不执行任何代码:
public void windowEvents(WindowEvent event){
if(event.getSource() == viewMessages) readObjArrayList();
}
我认为 WindowEvent 会被ComboBox的 windowEvents = #OnsShow 触发, viewMessages(FX:ID)。
请告知。
感谢您的帮助。
答案 0 :(得分:1)
根据javadoc,WindowEvent与 Window 显示/隐藏动作相关。由于Node类不是Windows,因此在其上安装WindowEvent处理程序不会产生任何影响。
由于您使用的是SceneBuilder,我认为您必须拥有一个定义了fx:controller
类的FXML文件。在任何控制器类中,您都可以添加一个非arg initialize()
方法,该方法将在处理FXML文件后立即调用。
public class YourController {
@FXML
ComboBox viewMessages;
public void initialize() {
readObjArrayList();
}
private void readObjArrayList() {
...
}
}