我想删除ComboBox中的所有项目,并在其他按钮点击时用其他项目重新填充。我使用removeAll()执行此操作,但之前选择的值仍然存在于组合中。这就是我所做的。< / p>
@AutoGenerated
private AbsoluteLayout mainLayout;
@AutoGenerated
private GridLayout gridLayout_1;
@AutoGenerated
private HorizontalLayout horizontalLayout_1;
@AutoGenerated
private Button cancelBtn;
@AutoGenerated
private Button saveBtn;
@AutoGenerated
private TextField openingHoursTf;
@AutoGenerated
private Label label_10;
@AutoGenerated
private TextField emailTf;
@AutoGenerated
private Label label_9;
@AutoGenerated
private TextField phoneTf;
@AutoGenerated
private Label label_3;
@AutoGenerated
private TextField postCodeTf;
@AutoGenerated
private Label label_4;
@AutoGenerated
private TextArea addressLine2Tf;
@AutoGenerated
private Label label_8;
@AutoGenerated
private TextArea addressLine1Tf;
@AutoGenerated
private Label label_2;
@AutoGenerated
private TextArea descriptionTf;
@AutoGenerated
private Label label_5;
@AutoGenerated
private TextField nameTf;
@AutoGenerated
private Label label_1;
@AutoGenerated
private ComboBox statusComboBox;
@AutoGenerated
private Label label_21;
@AutoGenerated
private ComboBox typeComboBox;
@AutoGenerated
private Label label_19;
@AutoGenerated
private TextField codeTextField;
@AutoGenerated
private Label label_17;
@AutoGenerated
private ComboBox areaComboBox;
@AutoGenerated
private Label label_15;
@AutoGenerated
private ComboBox stateComboBox;
@AutoGenerated
private Label label_13;
@AutoGenerated
private ComboBox countryComboBox;
@AutoGenerated
private Label label_11;
@AutoGenerated
private Upload image_upload_1;
@AutoGenerated
private Label label_6;
/**
* The constructor should first build the main layout, set the composition
* root and then do any custom initialization.
*
* The constructor will not be automatically regenerated by the visual
* editor.
*/
private Window window;
private StoreDTO store;
private StoreDataProvider storeDataProvider;
private StoreContainer storeContainer;
List<CountryDTO> countries = null;
List<StoreTypeDTO> storeTypeList = null;
List<AreaDTO> areasList=null;
String imageMediumUrl;
String imageHighUrl;
String imageLowUrl;
private ImageUploader uploader;
public NewStoreWindow() {
buildMainLayout();
setCompositionRoot(mainLayout);
statusComboBox.addItem(Status.ACTIVE);
statusComboBox.addItem(Status.INACTIVE);
statusComboBox.setNullSelectionAllowed(false);
try {
countries = StoreDataProvider.getStoreDataProvider()
.getAllCountries();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for (CountryDTO country : countries) {
countryComboBox.addItem(country);
}
if (countries != null && !countries.isEmpty()) {
countryComboBox.select(countries.get(0));
}
countryComboBox.setNullSelectionAllowed(false);
CountryDTO dto=(CountryDTO)countryComboBox.getValue();
try {
areasList=StoreDataProvider.getStoreDataProvider().getAreasByCountry(dto.getId());
areaComboBox.removeAllItems();
for (AreaDTO area : areasList) {
areaComboBox.addItem(area);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
areaComboBox.setNullSelectionAllowed(false);
countryComboBox.addListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
areaComboBox.removeAllItems();
areaComboBox.setValue(null);
CountryDTO dto=(CountryDTO)countryComboBox.getValue();
try {
areasList=StoreDataProvider.getStoreDataProvider().getAreasByCountry(dto.getId());
for (AreaDTO area : areasList) {
areaComboBox.addItem(area);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
答案 0 :(得分:1)
正如您setNullSelectionAllowed(false)
所做的那样,combox框必须始终具有值。
重新填充列表和组合框,将值设置为列表中的第一个dto。
e.g。
areaComboBox.removeAllItems();
CountryDTO dto = (CountryDTO)countryComboBox.getValue();
areasList = StoreDataProvider.getStoreDataProvider().getAreasByCountry(dto.getId());
for (AreaDTO area : areasList) {
areaComboBox.addItem(area);
}
// Set value to the first of the list
if(!areaList.isEmpty()){
areaComboBox.setValue(areasList.get(0));
}
答案 1 :(得分:1)
如果您想对您的国家/地区进行更改 - ComboBox立即生效,而不是您必须使用:
countryComboBox = new ComboBox();
countryComboBox.setImmediate(true);
这样,ValueChangeListener中的代码将立即执行。您的区域列表将被清除。您应该避免将所有内容设置为“立即”,因为这会导致过多的流量。