Label和HashMap之间的绑定不会更新

时间:2017-01-31 01:31:18

标签: java user-interface javafx binding

考虑以下用例: 一个带有四个标签的简单GUI,应该绑定到HashMap.get(" key"),以便提供基本的多语言实现。其他语言存储在类似的HashMaps中,并根据需要覆盖绑定的地图。

所以在按下按钮时,GUI语言应该从德语改为英语或意大利语等。翻译已完成,无需从谷歌获取。

HashMaps是ObservableMaps。 标签以FXML创建,其FX:id为lab1,lab2,lab3和lab4。

private ObservableMap<String, StringProperty>   listHash    = FXCollections.observableHashMap();
private ObservableMap<String, StringProperty>   listHashDeu = FXCollections.observableHashMap();

listHash.put("lab1", new SimpleStringProperty("Label one"));
listHash.put("lab2", new SimpleStringProperty("Label two"));
listHash.put("lab3", new SimpleStringProperty("Label three"));
listHash.put("lab4", new SimpleStringProperty("Label four"));
listHashDeu.put("lab1", new SimpleStringProperty("Label eins"));
listHashDeu.put("lab2", new SimpleStringProperty("Label zwei"));
listHashDeu.put("lab3", new SimpleStringProperty("Label drei"));
listHashDeu.put("lab4", new SimpleStringProperty("Label vier"));

绑定是这样完成的:

lab1.textProperty().bind(listHash.get("lab1"));
lab2.textProperty().bind(listHash.get("lab2"));
lab3.textProperty().bind(listHash.get("lab3"));
lab4.textProperty().bind(listHash.get("lab4"));

更改语言是这样的:

listHash.putAll(listHashDeu);

向listHash添加更改侦听器显示确实正在注册更改。 System.out.println显示所有值确实也已更新。但标签保持不变。

我尝试使用差异列表,如HashMaps,包含在ObservableMap和List StringProperty中的地图。 我唯一的运气是使用List StringProperty,间接看似很脏。

使用List StringProperty,然后将索引0绑定到Label并将语言存储在索引1-x中,然后使用我需要的任何语言覆盖索引0确实更新标签。但这种方法看起来很糟糕,很难维护。添加新语言需要更新所有列表,我需要为我的应用程序中的每个GUI元素提供一个列表。

那么,我缺少什么来获得HashMap或类似的非常适合存储几十个GUI元素翻译的结果?

0 个答案:

没有答案