2009-11-17 28 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