2016-12-16 138 views
0

我有LinkedHashMap和来自数据库的数据。JavaFX - 将LinkedHashMap绑定到组合框

private Map<Integer, String> linkedHashMap = new LinkedHashMap<>(); 
eg: 1, Value1 
    2, Value2 
    etc. 

我能够给这个的LinkedHashMap与组合框绑定为可观察值?

到目前为止,我已经填写了这个ComboBox这个代码。

ComboBox.getItems().addAll(this.linkedHashMap.values()); 

问题是如果我需要重新加载值我必须清除所有ComboBox值,我必须再次导入值。

回答

0

您应该使用ObservableMap

private Map<Integer, String> linkedHashMap = new LinkedHashMap<>(); 
.... 

ComboBox<String> c = new ComboBox<>(); 
ObservableMap<Integer, String> observableMap = FXCollections.observableMap(linkedHashMap); 
observableMap.addListener(new MapChangeListener<Integer, String>() { 
    @Override 
    public void onChanged(
      javafx.collections.MapChangeListener.Change<? extends Integer, ? extends String> change) { 
     if(change.wasAdded()) { 
      c.getItems().add(change.getValueAdded()); 
     } else if(change.wasRemoved()) { 
      c.getItems().remove(change.getValueRemoved()); 
     } 
    } 
}); 

为了CombBox自动更新,添加条目observableMap

observableMap.put(someInt, "someValue");