如何从ComboBox获取项目索引?

时间:2018-03-13 16:38:24

标签: javafx combobox

我有ObservableList<Fruits> fruits。每个水果对象都有名称和值参数。对象是:{&#34; apples&#34;,22},{&#34; oranges&#34;,3}和{&#34; pears&#34;,5}。我将这些项目添加到ComboBox

fruitComboBox.setItems(fruits);

如何根据对象的名称从此ComboBox获取项目索引?例如,得到&#34; oranges&#34;的索引。对象

我需要获取item的索引,以便我可以使用:

fruitComboBox.getSelectionModel.select(index);

完整代码如下:

fruitComboBox.setItems(fruits);

fruitFactory = lv -> new ListCell<Fruits>){
     @Override
     protected void updateItem(Fruits fruit, boolean empty) {
        super.updateItem(fruit, empty);
        setText(empty ? "" : fruit.getName + ": " + fruit.getValue);
     }
};

fruitComboBox.setCellFactory(fruitFactory);
fruitComboBox.setButtonCell(fruitFactory.call(null));

对于不同的人,我需要默认选择不同的水果。我尝试使用:

fruitComboBox.getSelectionModel().select(orangeObject);

但它显示ButtonCell中没有格式化的对象,也没有在开放ComboBox中进行任何选择。使用索引给出了完美的结果:

fruitComboBox.getSelectionModel().select(2);

唯一的问题是,我不知道如何根据其中一个参数获取ComboBox中的项目索引。

2 个答案:

答案 0 :(得分:0)

为什么不这样做:

for (Fruit fruit : fruitComboBox.getItems()) {
    if ("oranges".equals(fruit.getName())) {
        fruitComboBox.getSelectionModel().select(fruit);
        break ;
    }
}

或者,如果您更喜欢基于流的解决方案

fruitComboBox.getItems().stream()
    .filter(fruit -> "oranges".equals(fruit.getName()))
    .findAny()
    .ifPresent(fruitComboBox.getSelectionModel()::select);

答案 1 :(得分:-1)

只需简单地获取组合框中所选项目的索引即可使用组合框的.getselectedindex()方法