0

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


        }

    });
4

2 回答 2

1

如果您想让您的国家/地区的更改立即生效,那么您必须使用:

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

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

于 2013-05-28T13:48:52.810 回答
1

正如你所做setNullSelectionAllowed(false)的那样,组合框必须始终有一个值。重新填充列表和组合框,将值设置为列表中的第一个 dto。

例如

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));
}
于 2013-05-28T13:11:28.087 回答