我需要帮助一个用于添加新枪的表格。我有一些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中预先存在的值。
完成所有这些工作的最佳方法是什么?
答案 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()`而不是。