2009-11-17 55 views
0

我已經創建了一些自定義複合控件,它監聽一個事件(在我的例子中是loginEvent)。一旦事件被捕獲,小部件的狀態就會改變,看起來應該是這樣(在我的情況下,我想將其中一個圖標更改爲用戶登錄的信號)。在gwt中刷新UI

但是,在事件被捕獲後,我可以根據新狀態再次繪製自己的小部件嗎?

我非常新的GWT如此溫柔,請詳細說明...

回答

1

有很多方法可以做到這一點。此示例說明如何在用戶登錄事件發生時顯示登錄/註銷並切換可見性。

public class LoginLogoutWidget extends Compostite { 
    private final Anchor m_loginLink; 
    private final Anchor m_logoutLink; 

    public LoginLogoutWidget() { 

     m_loginLink = new Anchor("Login"); 
     //Register event handlers etc 

     m_logoutLink = new Anchor("Logout"); 
     //Register event handlers etc 

     HorizontalPanel hp = new HorizontalPanel(); 

     hp.add(m_loginLink); 
     hp.add(m_logoutLink); 

     initWidget(hp); 

     //Default login visible, and logout invisible 
     m_logoutLink.setVisible(false); 
    } 

    public void onLoginEvent(boolean loggedIn) {   
     m_loginLink.setVisible(!loggedIn); 
     m_logoutLink.setVisible(loggedIn); 
    } 
} 
-3

如果你有這樣的事情:

HorizontalPanel panel = new HorizontalPanel(); 
Image oldImage = new Image("url to old img"); 
panel.add(oldImage); 

那麼你應該能夠做這樣的事情:

panel.remove(oldImage); 
Image newImage = new Image("url to new img"); 
panel.add(newImage); 

panel.layout(); 

我發現,在某些情況下,如果我不要在父容器上調用「layout()」方法,那麼以編程方式添加的內容不會像我期望的那樣顯示在屏幕上。

希望有幫助!

+0

panel.layout() - 這聽起來像GXT,不是核心GWT對我來說....不,事情並不像GXT期望的那樣工作,因爲各種原因,更改不會立即應用於DOM,不像正常的GWT。這會導致對.layout()和類似的方法的各種多餘的調用。至少它在我們的代碼中做了,然後我們開始離開這個圖書館。 側軌結束,否則好點。 – bikesandcode 2009-11-19 05:34:36