0

我正在使用Compose for Desktop为我的桌面应用程序设计一个 GUI 。如果应用程序关闭并重新打开,一些 GUI 组件需要保留 — 一些 GUI 组件还需要根据某些状态进行更改。为此,我使用了一个简单的java.util.Properties对象来存储信息(我已经扩展Properties为在调用时将其内容存储到文件setProperty中)。

例如,我希望在更改语言环境时更新 GUI 组件。当用户更改语言环境时,我设置了该属性,类似于:

launcherState = Properties() // This is being initialized before the launcher is rendered
...
launcherState.setProperty("locale", "en")

然后我想要一个ResourceBundle——由一个状态定义的——更新。我尝试过这样的事情:

val locale by remember { derivedStateOf { launcherState.getProperty("locale") } }
val i18n by remember {
        derivedStateOf {
            ResourceBundle.getBundle("i18n.launcher", Locale.forLanguageTag(locale))
        }
    }

GUI 的文本元素使用i18n对象来获取它们的字符串。

但是,如果我调用launcherState.setProperty("locale", "fr"),locale并且i18n不更新(因此 GUI 不会更新)——我相信他们无论如何都不应该这样做。

所以我的问题是,我怎样才能使launcherState“可观察”,以便当我对其进行更改时,状态会更新?或者,我应该采取完全不同的方法。

4

0 回答 0