如何使用UIBinder在GWT的TabPanel中设置默认选项卡选择

时间:2014-12-16 01:56:05

标签: gwt uibinder tabpanel

我有一个TabPanel,我已经在ui.xml文件中编码了。我想保留其中一个选项卡作为默认选项(如果用户没有指定任何内容,您会认为已经选择了第0个选项卡,但这不是行为)。我如何通过ui.xml文件执行此操作?我试图搜索像

这样的属性

<g:Tab test="Something" selected="true">

但这似乎不起作用。我不想以编程方式设置默认选择。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我找不到任何其他方法,所以我为TabPanel制作了一个简单的包装器:

public class TabPanelWrapper extends Composite implements HasWidgets {

    private FlowPanel wrapper;
    private TabPanel tabPanel;
    private Integer defaultTab;

    public TabPanelWrapper() {
        wrapper = new FlowPanel();
        initWidget(wrapper);
    }

    public void setDefaultTab(int dafaultTab) {
        this.defaultTab = dafaultTab;
        if(tabPanel != null && defaultTab < tabPanel.getWidgetCount())
            tabPanel.selectTab(defaultTab);
    }

    @Override
    public void add(Widget w) {
        if(w instanceof TabPanel && tabPanel == null) {
            tabPanel = (TabPanel) w;
            if(defaultTab != null && defaultTab < tabPanel.getWidgetCount())
                tabPanel.selectTab(defaultTab);
            wrapper.add(tabPanel);
        }
    }

    @Override
    public void clear() {
        wrapper.clear();
    }

    @Override
    public Iterator<Widget> iterator() {
        return wrapper.iterator();
    }

    @Override
    public boolean remove(Widget w) {
        return wrapper.remove(w);
    }
}

此包装器具有setDefaultTab方法,因此您可以在UiBinder中使用defaultTab属性,如下所示:

<t:TabPanelWrapper defaultTab="1">
    <g:TabPanel>
        <g:Tab text="Header #1">
            <g:FlowPanel>
                <g:Label>Content #1</g:Label>
            </g:FlowPanel>
        </g:Tab>
        <g:Tab text="Header #2">
            <g:FlowPanel>
                <g:Label>Content #2</g:Label>
            </g:FlowPanel>
        </g:Tab>
        <g:Tab text="Header #3">
            <g:FlowPanel>
                <g:Label>Content #3</g:Label>
            </g:FlowPanel>
        </g:Tab>
    </g:TabPanel>
</t:TabPanelWrapper>

您可以获得的唯一陷阱是TabPanel包含在代表FlowPanel的其他<div>元素中。

使用此方法,您可以将任何属性添加到任何小部件;)