我已经创建了一些自定义复合控件,它监听一个事件(在我的例子中是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