如何识别SelectedTabChangeListener中的选定选项卡?

时间:2017-10-24 10:46:58

标签: java vaadin vaadin8

我想在用户选择其中一个标签时执行特定操作。

final TabSheet tabs = new TabSheet();
tabs.addTab(a, "a");

以下代码始终输出null

tabs.addTab(b, "b");
System.out.println(a.getCaption());
tabs.addSelectedTabChangeListener(event -> {
    System.out.println(event.getTabSheet().getSelectedTab().getCaption());
    System.out.println(event.getTabSheet().getSelectedTab().getId());
});

3 个答案:

答案 0 :(得分:2)

我还没有理解getSelectedTab()返回标签内容而不是实际标签实例的原因,但您至少有以下2个选项:

  • 如果您想对实际的标签实例做一些事情,可以使用选定的标签内容
  • 来获取它
  • 如果您不关心选项卡,并且只需要知道选择了某个选项卡,则可以根据预期内容检查所选选项卡内容

<强>代码:

import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.VerticalLayout;

public class TabSelectionComponent extends VerticalLayout {
    public TabSelectionComponent() {
        // tab contents
        Button aButton = new Button("A");
        Button bButton = new Button("B");

        // tabs and tab sheet
        TabSheet tabs = new TabSheet();
        TabSheet.Tab aTab = tabs.addTab(aButton, "A");
        TabSheet.Tab bTab = tabs.addTab(bButton, "B");

        // checkboxes for selection visualization
        CheckBox byTabInstance = new CheckBox("Check by tab instance");
        byTabInstance.setEnabled(false);
        CheckBox byTabContent = new CheckBox("Check by tab content");
        byTabContent.setEnabled(false);

        tabs.addSelectedTabChangeListener(event -> {
            // the selected tab matches the expected one
            byTabInstance.setValue(tabs.getTab(tabs.getSelectedTab()) == aTab);

            // the selected content matches the expected one 
            byTabContent.setValue(tabs.getSelectedTab() == aButton);
        });

        // add components to the UI
        addComponents(tabs, byTabContent, byTabInstance);
    }
}

<强>结果:

vaadin verify selected tab

答案 1 :(得分:0)

以下代码有效,但似乎并不特别很好

final Tab b = tabs.addTab(b, "b");
System.out.println(a.getCaption());
tabs.addSelectedTabChangeListener(event -> {
    final String connectorId = event.getTabSheet().getSelectedTab().getConnectorId();
    final String bTabConnectorId = logoutTab.getComponent().getConnectorId();
    if(connectorId.equals(bTabConnectorId)) {
        System.out.println("selected"); // prints if selected tab == b
    }
});

答案 2 :(得分:0)

没关系:event.getTabSheet().getSelectedTab().getId()

您只需在创建组件后自行显式设置组件的ID:a.setId("id_a"); b.setId("id_b"));否则getId()将返回null默认值。

如果需要使用除普通字符串以外的其他内容,也可以查看setData()

  

设置数据对象,可用于任何特定应用程序   数据。该组件不使用或修改此数据。