简体   繁体   中英

How to remove selected value in ComboBox

I want to remove all the items in ComboBox and refill it with some other items when another button clicks .I do it using removeAll() but the previously selected value is still there in the combo.This is what i did.

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


        }

    });

As you've done setNullSelectionAllowed(false) the combox box must always have a value. re-populating the list and combobox, set the value to the first dto in the list.

eg

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

If you want to have changes to your country-ComboBox take immediate effect than you have to use:

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

This way the code within the ValueChangeListener will be executed immediately. Your area-list will then be cleared. You should refrain from setting everything to "immediate" as this can cause excessive traffic.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM