我目前正在开发 javafx 桌面应用程序。它包含两个 observableList<Item>
s和两个HashMap<String,Double>
秒。我目前正在开发 menuBar
,其中包含这些 menuItem
s,即 Open
, New
, Save
和 Save As
.
考虑我启动桌面应用程序并添加一些 Item
的情况。到 observableList<Item>
.然后突然之间,我想打任何一个 menuItem
上面列出了。在开始新的工作流程(新菜单项)之前,我要检查我的程序的第一件事是是否需要保存当前的工作流程。
目前我有以下方法,但我认为它看起来非常笨拙且效率低下。
我开发的方法是设置一个变量private static final boolean isSaved = false;
然后在两个 observableList 中,我向它们添加了一个 Listener:
obslist1.addListener(new ListChangeListener<Item>(){
@Override
public void onChanged(ListChangeListener.Change change) {
isSaved = false;
}
});
obslist2
的代码是相同的。和 isSaved
变量设置为 true
仅当用户实际按下 Save
或 Save As
菜单项。
我发现我的方法非常笨拙且效率低下。有更好的方法吗?
最佳答案
你可以做类似的事情
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);
关于java - 检测对象是否保存在 javafx 桌面应用程序中的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32868563/