Всем добрый вечер! расскажите как в 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; }
}
|
|