我尝试构建自己的GWT小部件。我选择构建它的复合方式。但我有问题,小部件没有在屏幕上看到。这是复合小部件代码:
public class LoginPanel extends Composite {
private static final String DEFAULT_STYLENAME = "LoginPanel";
private TextBox nameField;
private PasswordTextBox passField;
private Button loginButton;
private Label errorLbl;
private DecoratedPopupPanel decoratedPopupPanel;
public LoginPanel() {
nameField = new TextBox();
passField = new PasswordTextBox();
loginButton = new Button("Login");
loginButton.getElement().setId("loginButton");
errorLbl = new Label();
Grid grid = new Grid(4, 2);
grid.setWidget(0,0, errorLbl);
grid.setWidget(1,0, new Label("Name"));
grid.setWidget(1,1, nameField);
grid.setWidget(2,0, new Label("Password"));
grid.setWidget(2,1, passField);
grid.setWidget(3,1, loginButton);
decoratedPopupPanel = new DecoratedPopupPanel();
initWidget(decoratedPopupPanel);
//decoratedPopupPanel.setAnimationEnabled(true);
decoratedPopupPanel.setWidget(grid);
//decoratedPopupPanel.setAnimationEnabled(true);
decoratedPopupPanel.setPopupPositionAndShow(new PopupPanel.PositionCallback() {
public void setPosition(int i, int i1) {
decoratedPopupPanel.setPopupPosition(Window.getClientWidth()/2, Window.getClientHeight()/2);
}
});
}
}
在入门课程函数onModuleLoad()
中,我有这样的代码和平:
LoginPanel lp = new LoginPanel();
RootPanel.get().add(lp);
当我在LoginPanel
函数后面的initWidget()
类行中删除时,一切都是正确的,但是widget不是居中的。任何人都可以帮助我吗?
答案 0 :(得分:2)
问题是PopupPanel
不能用作'普通'小部件,因为它不会附加到父级,但它会将自身附加到dom以保证它位于顶部。因此在弹出窗口中使用initWidget是没有意义的。
要完成这项工作,您应该将LoginWidget放在PopupPanel中而不是相反。您可以将PopupPanel设置为成员字段,并向LoginPanel添加方法show,以调用PopupPanel字段上的show。
如果您不希望登录窗口小部件独立于您正在使用“登录”窗口小部件的父窗口或上下文浮动,则不应使用PopupPanel。
答案 1 :(得分:0)
我相信你必须调用initWidget作为最后一件事。否则,“儿童”物品的所有处理都没有任何可以解决的问题。
尝试一下,如果这不起作用,我会尝试给出更好的答案。