我想删除ComboBox中的所有项目,并在单击另一个按钮时用其他一些项目重新填充。我使用removeAll()做到​​了,但是组合中仍然存在先前选择的值。这就是我所做的。

@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();
            }


        }

    });

最佳答案

如果要更改国家/地区组合框,则立即生效,而不必使用:

countryComboBox = new ComboBox();
countryComboBox.setImmediate(true);


这样,ValueChangeListener中的代码将立即执行。您的区域列表将被清除。您应避免将所有内容都设置为“立即”,因为这可能会导致流量过大。

10-08 06:17
查看更多