我有一个TabPanel,我已经在ui.xml文件中编码了。我想保留其中一个选项卡作为默认选项(如果用户没有指定任何内容,您会认为已经选择了第0个选项卡,但这不是行为)。我如何通过ui.xml文件执行此操作?我试图搜索像
这样的属性 <g:Tab test="Something" selected="true">
但这似乎不起作用。我不想以编程方式设置默认选择。
提前谢谢。
答案 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>
元素中。
使用此方法,您可以将任何属性添加到任何小部件;)