2017-05-15 42 views
-1

我有一個自定義ChoiceBox上的JavaFX choicebox做出變化,這我動態填充像這樣:怎麼聽

public class CustomChoiceBox { 
    public void addItems(List<Item> items) { 
     // Populate choicebox 
     for(Item item : items) { 
      CustomOption choice = new CustomOption(String.valueOf(item.getId()), item); 
      this.getItems().add(choice); 
     } 
    } 
} 

CustomOption定義如下自定義類:

public class CustomOption extends Observable{ 
    private String key; 
    private Object value; 

    public CustomOption(String key, Object value) { 
     this.key = key; 
     this.value = value; 
    } 
} 

我想能夠聽取用戶何時作出不同選擇並獲得該選擇的價值。 所以我添加了一個監聽器:

myChoiceBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<CustomOption>() { 
@Override 
public void changed(ObservableValue<? extends CustomOption> observable, 
    CustomOption oldValue, CustomOption newValue) { 

     System.out.println(newVaue.getValue()); 
    } 
}); 

然而,當我改變選擇這個代碼不運行。 我也用myChoiceBox.valueProperty嘗試()

+1

是吧'CustomOption',或'ChoiceBoxOption'試試?據推測,它應該是'公共類CustomChoiceBox擴展ChoiceBox '(或'ChoiceBox ',無論你實際使用)。如果這些問題得到解決,那麼您發佈的代碼並沒有明顯的錯誤,所以問題可能在其他地方。您應該創建一個[MCVE]並編輯您的問題以包含它。 –

回答

-1

你可以通過使用INDEXPROPERTY,而不是選擇

final ChoiceBox<String> names = new ChoiceBox<String>(); 

names.getItems().add("john"); 
names.getItems().add("alex"); 
names.getItems().add("smith"); 

names.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() { 
    @Override 
    public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) { 
    System.out.println(names.getItems().get((Integer) number2)); 
    } 
});