onResize не вызывается - PullRequest
       48

onResize не вызывается

0 голосов
/ 13 декабря 2011

Как написать виджет, который реагирует на изменение размера?

Следующее не работает.onResize () вызывается только один раз в начале.Последнее изменение размера окна браузера не приводит к вызову этого метода, несмотря на то, что размеры DIV изменяются.

public class MyWidget extends SimpleLayoutPanel {

private Label label;

public MyWidget() {
    label = new Label("A");
    add(label);
}

@Override
public void onResize() {
    super.onResize();
    int width = label.getElement().getClientWidth();
    int height = label.getElement().getClientHeight();
    int fontsize = (width>height?height:width);
    if( fontsize > 0 ) {
        DOM.setStyleAttribute(label.getElement(), "font-size", Integer.toString(fontsize)+"px");
    }
}

}

и основной модуль

public void onModuleLoad() {

    MyWidget myWidget = new MyWidget();
    DOM.setStyleAttribute(myWidget.getElement(), "position", "fixed");
    DOM.setStyleAttribute(myWidget.getElement(), "top", "0px");
    DOM.setStyleAttribute(myWidget.getElement(), "left", "0px");
    DOM.setStyleAttribute(myWidget.getElement(), "bottom", "0px");
    DOM.setStyleAttribute(myWidget.getElement(), "right", "0px");

    RootPanel rootPanel = RootPanel.get();
    rootPanel.add(myWidget);


}

ОБНОВЛЕНИЕ 1

Версия, основанная на ResizComposite, также не работает.В этом случае onResize никогда не вызывается вообще.

public class MyWidget extends ResizeComposite  {

private Label label;

public MyWidget() {
    label = new Label("A");
    DOM.setStyleAttribute(label.getElement(), "position", "fixed");
    DOM.setStyleAttribute(label.getElement(), "top", "0px");
    DOM.setStyleAttribute(label.getElement(), "left", "0px");
    DOM.setStyleAttribute(label.getElement(), "bottom", "0px");
    DOM.setStyleAttribute(label.getElement(), "right", "0px");

    SimpleLayoutPanel simpleLayoutPanel = new SimpleLayoutPanel();
    simpleLayoutPanel.add(label);

    initWidget(simpleLayoutPanel);
}

@Override
public void onResize() {

    int width = label.getElement().getClientWidth();
    int height = label.getElement().getClientHeight();
    int fontsize = (width>height?height:width);
    if( fontsize > 0 ) {
        DOM.setStyleAttribute(label.getElement(), "font-size", Integer.toString(fontsize)+"px");
    }

    super.onResize();
}

}

1 Ответ

1 голос
/ 13 декабря 2011

Вы должны добавить к виджету ProvidesResize (RootLayoutPanel, ResizeLayoutPanel) или HeaderPanel, чтобы RequiresResize был отмечен. Смотри http://code.google.com/webtoolkit/doc/latest/DevGuideUiPanels.html#Resize

...