我已經創建了一些自定義複合控件,它監聽一個事件(在我的例子中是loginEvent)。一旦事件被捕獲,小部件的狀態就會改變,看起來應該是這樣(在我的情況下,我想將其中一個圖標更改爲用戶登錄的信號)。在gwt中刷新UI
但是,在事件被捕獲後,我可以根據新狀態再次繪製自己的小部件嗎?
我非常新的GWT如此溫柔,請詳細說明...
我已經創建了一些自定義複合控件,它監聽一個事件(在我的例子中是loginEvent)。一旦事件被捕獲,小部件的狀態就會改變,看起來應該是這樣(在我的情況下,我想將其中一個圖標更改爲用戶登錄的信號)。在gwt中刷新UI
但是,在事件被捕獲後,我可以根據新狀態再次繪製自己的小部件嗎?
我非常新的GWT如此溫柔,請詳細說明...
有很多方法可以做到這一點。此示例說明如何在用戶登錄事件發生時顯示登錄/註銷並切換可見性。
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);
}
}
如果你有這樣的事情:
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()」方法,那麼以編程方式添加的內容不會像我期望的那樣顯示在屏幕上。
希望有幫助!
panel.layout() - 這聽起來像GXT,不是核心GWT對我來說....不,事情並不像GXT期望的那樣工作,因爲各種原因,更改不會立即應用於DOM,不像正常的GWT。這會導致對.layout()和類似的方法的各種多餘的調用。至少它在我們的代碼中做了,然後我們開始離開這個圖書館。 側軌結束,否則好點。 – bikesandcode 2009-11-19 05:34:36