我目前正在开发一个javafx桌面应用程序。它包含两个observableList<Item>
和两个HashMap<String,Double>
。我目前正在开发menuBar
,其中包含menuItem
,Open
,New
,Save
和Save 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
的代码完全相同。仅当用户实际按下isSaved
或true
menuItem时,Save
变量才会设置为Save As
。
我发现我的方法非常笨拙和低效。有更好的方法吗?
答案 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);