/Client side‎ > ‎

UI、畫面相關

AbsolutePanel 大小設定

Q:AbsolutePanel 如果在 CSS 加上 border,會導致 getWidgetLeft() 等無法取得正確值。

AbsolutePanel 裡頭必須先有實際的東西,才能設定大小。
//不會有效果
absolutePanel.setPixelSize(300,300);
absolutePanel.add(new Label("FOO"));

//有效果
absolutePanel.add(new Label("FOO"));
absolutePanel.setPixelSize(600,600);

UiBinder 掛 styleName 的隱憂

假設 Child.ui.xml 裡頭這樣寫
<g:HTMLPanel styleName="{style.inChild}" > <!-- blahblah --> </g:HTMLPanel>
而 Parent.ui.xml 裡頭這樣寫
<g:HTMLPanel>
    <foo:Child styleName="{style.inParent}" />
<g:HTMLPanel>
實際上 Child 這個 widget 的 HTMLPanel 只會有 inParent 的 css 設定,而不會有任何 inChild 的 css 設定。 個人是比較建議 ui.xml 的 root widget 一律不准掛上 styleName 來解決這件事情。

UIBinder 繼承問題

Parent 這個 class 有作 uiBinder,Child extends Parent(有呼叫 super()),畫面顯示沒有問題,但是如果是在 Child 裡頭用 @UiHandler 掛上的 xxxHandler 則完全不會起作用。

Image 必須實際加到 DOM tree 才會觸發 onFoo()

//不會有效果
final Image = new Image("foo.png");
image.addLoadHandler(new LoadHandler(){
    public void onLoad(LoadEvent event){
        popupPanel.setWidget(image);
    }
}

//有效果
final Image = new Image("foo.png");
image.addLoadHandler(new LoadHandler(){
    public void onLoad(LoadEvent event){
    }
}
popupPanel.setWidget(image);

TextArea 自動捲到最底

    public void log(String message) {
        console.setText(console.getText() + message + "\r\n");
        console.setCursorPos(console.getText().length());
        console.getElement().setScrollTop(console.getElement().getScrollHeight());
    }


Comments