Как получить имя вкладки в GWT TabPanel - PullRequest
1 голос
/ 25 июня 2010

У меня есть панель вкладок, где я добавляю вкладки динамически.

В данный момент это может выглядеть следующим образом:

tabPanel.add(new HTML("Dashboard"), new Hyperlink("Dashboard", "dashboard"));       
tabPanel.add(new CashGameTabPage(this), new Hyperlink("Cash Games", "cash"));
tabPanel.add(new TournamentTabPage(this), new Hyperlink("Tournament", "tournament"));

Я хотел бы проверить, существует ли уже Tab.Если он существует, я должен получить его индекс.Если он не существует, я должен получить 0. Я думал, как функцию, такую ​​как:

public static int getIndexIfAlreadyExists(DecoratedTabPanel tabPanel, String title) {
    int tabcount = tabPanel.getTabBar().getTabCount();      
    for(int i = 0; i < tabcount;i++) {              
       if(/*TODO get a Tab Text */.equals(title))
          return i;
    return 0;
}

Я хотел бы получить

getIndexIfAlreadyExists(tabPanel, "Dashboard") -> 0
getIndexIfAlreadyExists(tabPanel, "Cash Games") -> 1
getIndexIfAlreadyExists(tabPanel, "Tournament") -> 2

Однако мне не удается найтиметод для получения текста.Есть идеи, как этого добиться.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 26 июня 2010

Я думаю, что вы, возможно, ищете TabBar.getTabHTML (int index).

Однако я обычно делаю что-то, как предложил Крис, но создаю объект данных для самих вкладок

public interface Tab {
  String getName(); // or Widget
  Widget getContent();
}

и добавление вкладок с помощью оболочки на TabPanel:

List<Tab> tabs;

public void addTab(Tab tab) {
  tabs.add(tab);
  tabPanel.add(tab.getContent(), tab.getName);
}

public Tab getTab(int i) {...}

Кроме того, если вы не используете новые классы LayoutPanel, вам следует взглянуть на них.

1 голос
/ 25 июня 2010

TabPanel на самом деле не делает это простым. Может быть возможно получить виджет Гиперссылки как-то через TabPanel.getTabBar().getTab(index), но я не уверен.

Это примерно то, что я бы сделал:

public class TabPanelModel {

    private final List<String> titleList = new ArrayList<String>();
    private final TabPanel tabPanel;

    public TabPanelModel(final TabPanel tabPanel) {
        this.tabPanel = tabPanel;
    }

    public void addToPanel(Widget widget, final String linktext, final String targetHistoryToken) {
        tabPanel.add(widget, new Hyperlink(linktext, targetHistoryToken));
        titleList.add(linktext);
    }

    /* similar for remove, ... */

    public int getIndexIfAlreadyExists(final String linktext) {
        return titleList.indexOf(linktext) + 1;
    }

}

В этом подходе используется небольшой объем дополнительной памяти, но я считаю, что в любом случае такую ​​информацию лучше иметь в чистой модели.

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