2011-12-13 2 views
0

크기 조정에 반응하는 위젯을 작성하는 방법은 무엇입니까?onResize가 호출되지 않았습니다.

다음은 작동하지 않습니다. onResize()는 처음에 한 번만 호출됩니다. DIV의 크기가 조정 되더라도 브라우저 창 크기가 변경되면이 메서드가 호출되지 않습니다. ResizComposite에 따라

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); 


} 

UPDATE 1

버전은 작동하지 않습니다. 이 경우 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

'RootPanel'은'ProvidesResize'를 구현합니까? –

+0

보이지 않습니다. 하지만 루트 패널에 RootPanel 이외의 것을 사용할 수 있습니까? – Dims

답변

1

당신은 영광 위해 ProvidesResize 위젯 (RootLayoutPanel, ResizeLayoutPanel) 또는 RequiresResize에 대한 HeaderPanel에 추가해야합니다. http://code.google.com/webtoolkit/doc/latest/DevGuideUiPanels.html#Resize

+0

내가 사용한 패널 (SimpleLayoutPanel)은 ProvidesResize를 수행합니다. 그런데 왜 작동하지 않습니까? – Dims

+0

나는 RootPanel 대신에 RootLayoutPanel을 사용했다. 감사 – Dims

관련 문제