2016-12-16 137 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");