Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > GXT 3 добавление и удаление компонент


Автор: Atum 20.12.2013, 20:23
Всем добрый вечер! 

расскажите как в GXT 3  удалить компонент из VerticalLayoutContainer ? Динамически?

создал SpinnerField - повесил на него событие по которому при увеличении счетчика будет добавляться новый компонент - на форму 
а при уменьшении - удаляться с формы последний ...

но почему то событие не работает ! 

если заменить двумя кнопками - то компоненты чудесно добавляются - но не удаляются ????

(Удаление проходит отлично на примере - кнопки - но)
но мне нужно добавлять и удалять формы с кнопками и полями ! а они не удаляются ? 
кто ответит как это сделать ?

И как заставить  SpinnerField - отрабатывать событие ?
Код

public class MainEntryPoint implements EntryPoint {
    public MainEntryPoint() {
    }

    public void onModuleLoad() {
        Viewport viewPort = new Viewport();        

        FramedPanel form = new FramedPanel();
        form.setHeaderVisible(true);
        form.setWidth(-1);
        
        FieldSet fieldSet = new FieldSet();
        fieldSet.setCollapsible(true);
        form.add(fieldSet);
        
        VerticalLayoutContainer p = new VerticalLayoutContainer();
        fieldSet.add(p);
        OrderedSet orderedSet = new OrderedSet();
        
        
        p.add(orderedSet, new VerticalLayoutData(1, -1));
        
        viewPort.add(form);
        RootLayoutPanel.get().add(viewPort);
        

    }
}



Код

  import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.core.client.dom.ScrollSupport;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.form.NumberPropertyEditor;
import com.sencha.gxt.widget.core.client.form.SpinnerField;
import com.sencha.gxt.widget.core.client.info.Info;
import java.util.LinkedList;

public class OrderedSet implements IsWidget{

VerticalLayoutContainer p;
LinkedList<TextButton> list = new LinkedList<TextButton>();// - список динамических полей
    @Override
    public Widget asWidget() {
        if (p == null) {
            p = new VerticalLayoutContainer();
            final VerticalLayoutContainer orderedPanel = new VerticalLayoutContainer();
            orderedPanel.setScrollMode(ScrollSupport.ScrollMode.AUTO);
            
            
          final SpinnerField<Integer> spinner = new SpinnerField<Integer>(new NumberPropertyEditor.IntegerPropertyEditor());
            spinner.setId("spinner");
            spinner.setName("spinner");
            spinner.setMinValue(1);
            spinner.setMaxValue(100);
            spinner.setValue(1, true, true); // таким образом можно установить начальное значение счетчика
            spinner.setOriginalValue(1);
            spinner.setAllowBlank(true);
            spinner.setEditable(false);
            spinner.addValueChangeHandler(new ValueChangeHandler<Integer>() {

                @Override
                public void onValueChange(ValueChangeEvent<Integer> event) {
                    Integer value =  event.getValue();
                    Info.display("ChangeHandler", "new Value: " + value);
                    while(list.size() < value) {
                         int n = list.size() + 1;
                        TextButton form = new TextButton("test"+n);
                        list.add(form );
                        orderedPanel.add(form , new VerticalLayoutData(1, -1, new Margins(5)));
                    } 
                    while(list.size() > value){
                          orderedPanel.remove(list.removeLast());
                    }
                        orderedPanel.onResize();
                  // тут как то нужно обновить orderedBetsPanel  или он должен обновиться сам ???
                }
            });
          
            
             p.add(spinner, new VerticalLayoutData(1, -1,new Margins(5)));
             
             
             TextButton button = new TextButton("test1");
             list.add(button );
             orderedPanel.add(button , new VerticalLayoutData(1, -1 , new Margins(5)));

             p.add(orderedPanel);

        }
        return p;
    }

    
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)