DialogBox в GWT не перетаскивается и не центрируется - PullRequest
2 голосов
/ 29 апреля 2011

Я новичок в программировании GWT.Пока у меня есть DialogBox, который должен собрать логин и пароль, который может при необходимости запустить другой DialogBox, который позволяет кому-то создать новую учетную запись.слева от экрана браузера, и его нельзя перетаскивать, хотя часть определения DialogBox заключается в том, что его можно перетаскивать.Тем не менее, второй DialogBox можно без проблем перетаскивать по экрану.

Мне бы очень хотелось, чтобы первый DialogBox появлялся в центре экрана и был перетаскиваемым, оба из которых я думалпроисходит автоматически, но это не так.

Итак, что может помешать перетаскиванию DialogBox?На RootPanel еще ничего нет.Имеет ли это значение?

Фрагменты кода доступны, если они помогают, но, возможно, этого общего плана достаточно для некоторых указателей.

Спасибо, Нил

Ответы [ 4 ]

3 голосов
/ 29 апреля 2011

Использование dialogBox.center() Это будет центрировать ваш DialogBox в центре экрана. Обычно DialogBox по умолчанию перетаскивается.

Только что попробовал, и не имеет значения, если ваша RootPanel пуста, а мы нет. Когда я просто показываю DialogBox на ModuleLoad, он перетаскивается и центрируется. Вероятно, проблема находится где-то еще.

Это пример самого 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();
  }
}

Здесь больше информации о DialogBox.

1 голос
/ 11 июня 2012

Похоже, что вы переопределяете этот метод в Widget:

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

В Widget handlerManager ссылается на приватный HandlerManager.

Либо добавьте super.fireEvent (событие) в ваш методили, как вы сделали, переименуйте его.

1 голос
/ 29 апреля 2011

Не видя ни одного вашего кода, трудно понять, что происходит не так.Следующий код работает для меня (игнорируйте отсутствующий стиль ...):

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();
}

Оба поля перетаскиваются и отображаются в центре окна вашего браузера.

0 голосов
/ 30 апреля 2011

Что ж, с огромным количеством проб и ошибок я нашел проблему, которая заключалась в следующем: у меня был метод в объекте, основанном на DialogBox, который называется fireEvent, который выглядел так:

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

Затем, когда была нажата кнопка на DialogBox, событие было создано и отправлено в handlerManager для правильного запуска.

И получается, что если я изменю его на это (LoginEvent isпользовательское событие):

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

... или к этому ....

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

DialogBox можно перетаскивать.Однако, если метод начинается со строки

public void fireEvent(GwtEvent<?> event)

, то результатом является DialogBox, который нельзя перетаскивать.

Я немного обеспокоен этим, потому что я не могу 'Я понимаю причину, по которой мой выбор имени метода должен влиять на перетаскиваемость DialogBox, или почему использование базового класса (GwtEvent) вместо пользовательского класса, который его расширяет, должно влиять на перетаскиваемость.И я подозреваю, что для такого наивного новичка, как я, существуют десятки подобных ловушек.

(Ожидать, что DialogBox центрируется сам, было просто моей ошибкой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...