T.M. SoftStudio

feci quod potui, faciant meliora potentes

Google Web Toolkit Клонирование Widget-компонентов

 

Предположим мы создали панель VerticalPanel, в которую добавили набор Widget-компонентов, например набор гиперссылок Hyperlink, и добавили созданную панель в панель с прокруткой:

ScrollPanel scrollPanel = new ScrollPanel();

rootPanel.add(scrollPanel);

scrollPanel.setSize("600px", "100px");

scrollPanel.getElement().addClassName("border");

final VerticalPanel verticalPanel = new VerticalPanel();

scrollPanel.setWidget(verticalPanel);

verticalPanel.setSize("100%", "100%");

Hyperlink h1 = new Hyperlink("h1", false, "h1");

verticalPanel.add(h1);

Hyperlink h2 = new Hyperlink("h2", false, "h2");

verticalPanel.add(h2);

. . .

Затем мы хотим создать вторую панель с прокруткой и добавить в нее такую же вертикальную панель.

Если просто добавить созданную вертикальную панель во вторую панель с прокруткой:

ScrollPanel scrollPanel_1 = new ScrollPanel();

rootPanel.add(scrollPanel_1);

scrollPanel_1.setSize("600px", "100px");

scrollPanel_1.getElement().addClassName("border");

scrollPanel_1.setWidget(verticalPanel);

тогда вертикальная панель появится только во второй панели с прокруткой — в первой панели с прокруткой ее не будет.

Встает задача клонирования вертикальной панели для добавления ее во вторую панель с прокруткой.

 

Хотя класс com.google.gwt.user.client.ui.VerticalPanel и наследует метод clone() от класса java.lang.Object, для применения он недоступен.

Поэтому для клонирования панели необходимо создать класс, расширяющий класс com.google.gwt.user.client.ui.Widget:

class ClonedWidget extends Widget {

public ClonedWidget(Element element) {

setElement(element);

}

}

И создать его экземпляр, обертывающий DOM-элемент вертикальной панели:

final Element verticalPanelElement = DOM.clone(verticalPanel.getElement(), true);

final ClonedWidget verticalPanel_1= new ClonedWidget(verticalPanelElement);

verticalPanel_1.setSize("100%", "100%");

scrollPanel_1.setWidget(verticalPanel_1);