【问题标题】:TabLayoutPanel disable a Tab GWTTabLayoutPanel 禁用选项卡 GWT
【发布时间】:2011-07-04 15:17:52
【问题描述】:

如何在 TabLayoutPanel 中禁用选项卡(即用户单击时无法打开选项卡)?我在网上搜索但无法找到解决方案

谢谢

【问题讨论】:

    标签: gwt gwt-tablayoutpanel


    【解决方案1】:

    使用BeforeSelectionHandler

    TabLayoutPanel myPanel = new TabLayoutPanel();
    // Add children...
    
    myPanel.addBeforeSelectionHandler(new BeforeSelectionHandler<Integer>() {
      @Override
      public void onBeforeSelection(BeforeSelectionEvent<Integer> event) {
        // Simple if statement - your test for whether the tab should be disabled
        // will probably be more complicated
        if (event.getItem() == 1) {
          // Canceling the event prevents the tab from being selected.
          event.cancel();
        }
      }
    });
    

    如果您希望禁用的标签与启用的标签不同,您可以使用TabLayoutPanel#getTabWidget 获取标签小部件并为其添加样式名称。

    【讨论】:

    • 如何重新启用它?
    • 只有在你希望标签被禁用时才调用 BeforeSelectionHandler 中的 event.cancel()。
    • 我的要求是,当第一次加载有标签的页面时,我需要禁用标签。但是当有事情发生时,我需要再次启用标签。我怎样才能做到这一点?
    • 在 onBeforeSelection() 的 if 语句中,根据您的应用程序状态测试是否应禁用选项卡。
    • 是的,我有一个 if 语句,它在应用程序加载时禁用选项卡。但是在应用程序加载后我需要启用选项卡,所以我肯定需要将其状态从禁用更改为启用。
    【解决方案2】:

    对于以后遇到此问题的任何人:

    从 GWT 1.6 版开始,禁用/启用选项卡已内置到 GWT 中。 TabBar 类有一个方法 setTabEnabled(int index, boolean enabled) 可以启用/禁用给定索引处的选项卡。

    例如,禁用 TabPanel 中的所有选项卡:

    TabPanel myTabPanel = new TabPanel();
    // Add children
    
    TabBar tabBar = myTabPanel.getTabBar();
    for(int i=0; i<tabBar.getTabCount(); i++) {
        tabBar.setTabEnabled(i, false);
    }
    

    请参阅GWT javadoc 了解更多信息。

    为禁用的标签设置不同的样式(GWT 会自动执行此操作,但如果您想更改样式):禁用的tabBarItem div 被赋予另一个 CSS 类:gwt-TabBarItem-disabled

    【讨论】:

    • 问题是关于TabLayoutPanel 类型,而不是TabBar
    • @JasonTerk TabLayoutPanel 包含一个TabBar!那是位于TabLayoutPanel 顶部的部分,其中包含选项卡。您可以使用myTabLayoutPanel.getTabBar() 访问TabLayoutPanelTabBar(请参阅我的答案)。我已经更新了我的答案以使这一点更清楚。
    • getTabBar 类型上没有 getTabBar 方法。也许你的意思是TabPanel
    • @JasonTerk 哦,是的 - 哎呀,对不起!你是对的 - 我的意思是TabPanel。我已经更正了我的代码。
    【解决方案3】:

    您可以通过将类Tab 转换为Widget 来访问标签样式

    TabPanel tabPanel = new TabPanel();
    ((Widget)tabPanel().getTabBar().getTab(tabsToDisable.iterator().next())).addStyleName("disabled");
    

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多