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

标签 java javafx

我目前正在开发 javafx 桌面应用程序。它包含两个 observableList<Item> s和两个HashMap<String,Double>秒。我目前正在开发 menuBar ,其中包含这些 menuItem s,即 Open , New , SaveSave 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仅当用户实际按下 SaveSave 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/

相关文章:

java - 让 JavaFX 通过浏览器运行简单的 HelloWorld 应用程序

java - 在 Javafx 中更改图像

java - 通过 Android Intent 传递变量时出现 NumberFormatException

java - Google libphone 号码,用于获取相同国家代码的国家名称

java - 变量不可访问

java - PDFBox 没有将我想要的消息写入页面

java - java中如何通过按钮最小化、最大化、向下还原?

javafx - 胶子手机 2.2.0 : How to change ProgressBar/ProgressIndicator color?

java - C 中的 System.nanoTime() 等价物

java - 错误解析日期