如何在ComboBox中删除选定的值

时间:2013-05-28 11:52:55

标签: java combobox vaadin

我想删除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();
            }


        }

    });

2 个答案:

答案 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中的代码将立即执行。您的区域列表将被清除。您应该避免将所有内容设置为“立即”,因为这会导致过多的流量。