Добавление вкладки GWT из другой вкладки

Я хочу добавить вкладку на определенную панель вкладок из области содержимого. Область содержимого является динамической и поэтому находится в другом файле класса. Единственный известный мне способ получить текущее состояние панели вкладок (а не создавать новый объект панели вкладок) — это создать статический метод и переменную для доступа к объекту. Однако у меня возникают проблемы с внесением каких-либо изменений в панель вкладок после того, как я ее получу. Я могу без особых проблем вызывать функции внутри него, например извлекать строки, но я не могу добавить вкладку, что мне и нужно сделать. Вот общая суть:

в одном классе с именем XYZ:

private static MyPersonalTabPanel mypersonalTabPanel;

public XYZ {
  myperosonalTabPanel = this;
}

в моем другом файле одним нажатием кнопки я запускаю это:

MyPersonalTabPanel.getAppInstance().getXYZTabPanel().add(mywidget, "My Widget");

Я могу использовать свою функцию «getXYZTabPanel()» без ошибок, но когда я пытаюсь «добавить», она просто вылетает с белым экраном, без соответствующих ошибок. Любая помощь? Я видел проекты, добавляющие вкладки раньше, но не могу найти, чтобы это делалось через статический объект, подобный этому.

У меня еще нет этого внутри метода onClick, нужно ли мне это делать, чтобы получить доступ к статической переменной сеанса? В основном это вызывается в момент загрузки страницы.


gwt
person Organiccat    schedule 21.04.2009    source источник
comment
я немного запутался в том, каково намерение - вы хотите найти способ добавить вкладку из другого класса? или вы спрашиваете, как заставить его работать, используя статическое поле?   -  person Chii    schedule 27.04.2009


Ответы (1)


Проверить порядок инициализации? Вам нужно убедиться, что экземпляр XYZ, к которому вы хотите добавить вкладку, создан вашим последним вызовом «new XYZ()», и вам нужно убедиться, что он уже был обновлен до того, как вы попробуйте добавить вкладку.

Кроме того, я предполагаю, что XYZ расширяет MyPersonalTabPanel, который расширяет TabPanel? Чтобы уточнить, относится ли этот код к вашей ситуации:

public class MyPersonalTabPanel extends TabPanel {
  public static MyPersonalTabPanel instance;

  public MyPersonalTabPanel() {
    instance = this;
  }
}

public class TestClass {
  public void createPanel() {
    RootPanel.get().add(new MyPersonalTabPanel());
  }
  public void addTab(Widget widget) {
    MyPersonalTabPanel.instance.add(widget, "My Widget");
  }
}

Убедитесь, что функция createPanel() класса TestClass вызывается до вызова addTab(Widget).

person Steve Armstrong    schedule 30.04.2009