检测对象是否保存在javafx桌面应用程序中的最佳方法是什么?

时间:2015-09-30 14:21:16

标签: java javafx

我目前正在开发一个javafx桌面应用程序。它包含两个observableList<Item>和两个HashMap<String,Double>。我目前正在开发menuBar,其中包含menuItemOpenNewSaveSave As

考虑我已启动桌面应用程序并向Item添加一些observableList<Item>的情况。然后突然间,我想要点击上面列出的menuItem中的任何一个。我想在我的程序中检查的第一件事是是否需要保存当前的工作流程,然后再继续开始新的工作流程(New menuitem)。

我现在有以下方法,但我认为它看起来非常笨拙和低效。 我开发的方法是设置变量private static final boolean isSaved = false;

然后在两个可观察列表中,我为他们添加了一个监听器:

    obslist1.addListener(new ListChangeListener<Item>(){
          @Override
            public void onChanged(ListChangeListener.Change change) {
                isSaved = false;
          }
    });

obslist2的代码完全相同。仅当用户实际按下isSavedtrue menuItem时,Save变量才会设置为Save As

我发现我的方法非常笨拙和低效。有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

您可以执行类似

的操作
BooleanProperty saved = new SimpleBooleanProperty();
InvalidationListener savedListener = obs -> saved.set(false);

然后

private void save() {
    // save the data...

    // mark data as saved:
    saved.set(true);
}

obslist1.addListener(savedListener);
obslist2.addListener(savedListener);

anythingElseThatMightChangeAndIsImportant.addListener(savedListener);

您的保存按钮和菜单项等可以执行

saveButton.disableProperty().bind(saved);