我想在用户选择其中一个标签时执行特定操作。
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());
});
答案 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);
}
}
<强>结果:强>
答案 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()
。
设置数据对象,可用于任何特定应用程序 数据。该组件不使用或修改此数据。