【问题标题】:DialogBox in GWT isn't draggable or centredGWT 中的对话框不可拖动或居中
【发布时间】:2011-08-15 03:30:17
【问题描述】:

我是 GWT 编程新手。到目前为止,我有一个 DialogBox,它应该收集登录名和密码,如果需要,它可以启动另一个允许某人创建新帐户的 DialogBox。

这两个对话框中的第一个总是出现在浏览器屏幕的左上角,并且不能被拖动,尽管对话框的部分定义是它可以被拖动。但是,第二个 DialogBox 可以毫无问题地在屏幕上拖动。

我真正想要的是第一个 DialogBox 出现在屏幕中间并可以拖动,我认为这两者都会自动发生,但事实并非如此。

那么,什么东西可以阻止 DialogBox 被拖动? RootPanel 上还没有任何内容。这有什么不同吗?

如果有帮助,可以使用代码片段,但也许这个概要对于一些指针来说已经足够了。

谢谢 尼尔

【问题讨论】:

    标签: gwt dialog


    【解决方案1】:

    使用dialogBox.center() 这将使您的对话框位于屏幕中间。通常一个 DialogBox 默认是可拖动的。

    刚刚试了一下,如果你的 RootPanel 是空的也没关系。当我只在 ModuleLoad 上显示 DialogBox 时,它是可拖动的并且居中。可能问题出在其他地方。

    这是google本身的例子:

    public class DialogBoxExample implements EntryPoint, ClickListener {
    
      private static class MyDialog extends DialogBox {
    
        public MyDialog() {
          // Set the dialog box's caption.
          setText("My First Dialog");
    
          // DialogBox is a SimplePanel, so you have to set its widget property to
          // whatever you want its contents to be.
          Button ok = new Button("OK");
          ok.addClickListener(new ClickListener() {
            public void onClick(Widget sender) {
              MyDialog.this.hide();
            }
          });
          setWidget(ok);
        }
      }
    
      public void onModuleLoad() {
        Button b = new Button("Click me");
        b.addClickListener(this);
    
        RootPanel.get().add(b);
      }
    
      public void onClick(Widget sender) {
        // Instantiate the dialog box and show it.
        new MyDialog().show();
      }
    }
    

    Here 有关对话框的更多信息。

    【讨论】:

    • 是的,再一次,这工作正常,但它所做的和我所做的之间没有明显的区别。知道 DialogBox 在默认情况下是可拖动的,这是问题的关键,因为即使我想,我也不知道有什么方法可以关闭这种行为,但我的一个却不会移动!感谢您的回复。
    【解决方案2】:

    如果没有看到您的任何代码,就很难判断出了什么问题。以下代码适用于我(忽略缺少的样式...):

    public void onModuleLoad() {
        FlowPanel login = new FlowPanel();
        Button create = new Button("create");
        login.add(new TextBox());
        login.add(new TextBox());
        login.add(create);
        create.addClickHandler(new ClickHandler() {
    
            @Override
            public void onClick(ClickEvent event) {
                final DialogBox box = new DialogBox();
                FlowPanel panel = new FlowPanel();
                Button close = new Button("close");
                close.addClickHandler(new ClickHandler() {
    
                    @Override
                    public void onClick(ClickEvent event) {
                        box.hide();
                    }
                });
                panel.add(new Label("some content"));
                panel.add(close);
                box.setWidget(panel);
                box.center();
            }
        });
        DialogBox firstBox = new DialogBox(false, true);
        firstBox.setWidget(login);
        firstBox.center();
    }
    

    这两个框都可以拖动并显示在浏览器窗口的中心。

    【讨论】:

    • 是的,这也适用于我,而且我一直在做类似的事情。我将尝试将我正在做的事情减少到最小的情况并发布。感谢您的帮助。
    【解决方案3】:

    看起来你在 Widget 中重写了这个方法:

      public void fireEvent(GwtEvent<?> event) {
        if (handlerManager != null) {
          handlerManager.fireEvent(event);
        }
      }
    

    在 Widget 中,handlerManager 指的是私有的 HandlerManager。

    要么将 super.fireEvent(event) 添加到您的方法中,要么按照您所做的重命名它。

    【讨论】:

      【解决方案4】:

      好吧,经过大量的反复试验,我发现了问题所在:我在一个基于 DialogBox 的对象中有一个名为 fireEvent 的方法,它看起来像这样:

      public void fireEvent(GwtEvent<?> event)
      {
          handlerManager.fireEvent(event);
      }
      

      然后,当单击对话框上的按钮时,将创建一个事件并将其发送到 handlerManager 以正确触发。

      事实证明,如果我将其更改为这个(LoginEvent 是自定义事件):

      public void fireEvent(LoginEvent event)
      {
          handlerManager.fireEvent(event);
      }
      

      ...或者到这个....

      public void fireAnEvent(GwtEvent<?> event)
      {
          handlerManager.fireEvent(event);
      }
      

      对话框是可拖动的。但是,如果方法以

      行开头
      public void fireEvent(GwtEvent<?> event)
      

      那么结果就是一个不能拖动的DialogBox。

      对此我有点不安,因为我无法理解为什么我选择的方法名称会影响 DialogBox 的可拖动性,或者为什么使用基类 (GwtEvent) 而不是自定义类扩展它应该会影响可拖动性。而且我怀疑像我这样天真的新手有很多类似的陷阱。

      (期望对话框居中是我的错误。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 2022-11-25
        相关资源
        最近更新 更多