2010-06-25 3 views
1

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

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

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")); 

Я хотел бы проверить, если вкладка уже существует. Если он существует, я должен получить его индекс. Если он не существует, я должен получить 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 

Однако мне не удается найти способ, чтобы получить Текст. Любая идея, как добиться такого поведения.

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

+0

Если у вас есть виджеты, которые вы добавили на панель вкладок, вы можете передать их (вместо названий) для простой проверки через итерацию через виджеты на вкладке и сравнить с тем, который у вас есть. –

ответ

1

TabPanel на самом деле не делает это легко. Возможно, можно получить виджет Hyperlink каким-то образом через 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; 
    } 

} 

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

1

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

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

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, вы должны дать им взглянуть.

Смежные вопросы