当用户在另一个组合框中选择一个值时,如何设置组合框值

时间:2016-09-28 02:53:43

标签: javafx

我需要帮助一个用于添加新枪的表格。我有一些comboBox,其中一个有一个文本编辑器(ControlFX-textfields),当我输入一个枪模型值它将显示已有的那些,如果我选择一个那些值我想要其他的(口径,制造商,类型)得到该模型的相应值如下:在模型上选择“PT100”,caliber获得“.40”,类型获得“PISTOL”,制造商获得“TAURUS”。我在db上设置了所有模型。问题是当模型对于口径,类型或制造者具有更多的值时,例如:模型“CBC”,“puma”,“步枪”,它有2个口径可能“.38”和“357”。现在我已经尝试了以下口径的组合框:

modelo.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue observable, Object oldValue, Object newValue) {

            List<Modelo> list = listModelo.stream().filter(m -> m.getModeloNome().equals(newValue))
                    .collect(Collectors.toList());                

               for(Modelo a: list){
                   if(list.size() == 1){
                       calibreBox.setValue(a.getCalibre());
                       tipoBox.setValue(a.getTipoArma());
                       marcaBox.setValue(a.getMarcaArma());
                   }if(list.size()> 1){
                       System.out.println(a.getCalibre());
                       calibrelist.clear();
                       List<String>  cal = new ArrayList<>();
                       cal.add(a.getCalibre());
                       calibrelist = FXCollections.observableList(cal);

               }
            }

        }
    });

当只有一个型号时,根本没有问题。 我也希望实现: 当我键入我的数据库中不存在的模型时,其他组合应该保留db中预先存在的值。

完成所有这些工作的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您的问题是您尝试通过执行calibrelist = FXCollections.observableList(cal);再次实例化calibreList。如果calibreList是包含ComboBox项的列表,它已经通过执行caliberComboBox.setItems(calibreList);添加到ComboBox中,那么您需要操作该原始列表而不是再次实例化它。

而不是calibrelist = FXCollections.observableList(cal);,而是calibrelist.add(a.getCalibre);

请注意comboBox.setItems(calibreList)comboBox.getItems().addAll(calibreList)之间的差异。执行setItems(calibreList)后,您可以稍后使用该引用操作calibreList,例如通过执行ComboBox将项目添加到calibreList.add(".357");。但是如果你使用getItems().addAll(calibreList), the items in calibreList will be copied to the list in the ComboBox instead, and its connection to calibreList will be lost, and you will need to add items to the list using getItems()。add()`而不是。