在切换选项卡之前验证CTabFolder

时间:2015-04-21 08:42:29

标签: java tabs swt

CTabFolder中,我想在用户可以从一个标签切换到另一个标签之前检查未保存数据的内容。 SWT不提供PreSelection事件,如here所述。

我找到了workaround,建议在触发选择时切换回旧标签,验证数据,然后再次执行所需的切换,如果数据有效。

我确实理解这种解决方法的一般概念,但是,它对我不起作用。 oldPageIndexnewPageIndex始终具有相同的值,但我没有点击同一个标签。

this.tabContainer.addSelectionListener(new SelectionAdapter() {
   @Override
   public void widgetSelected(SelectionEvent event) {
      int oldPageIndex = tabContainer.getSelectionIndex();
      int newPageIndex = tabContainer.indexOf((CTabItem)event.item);

      // Here: oldPageIndex == newPageIndex

      ...
   }
});

这种解决方法是否仍然有效或者我可能做错了什么?或许,在此期间是否有任何修复真正的PreSelection事件?我尝试使用event.doit,但是当标签已经切换时,SelectionEvent会被触发。

1 个答案:

答案 0 :(得分:1)

您可以使用选择侦听器,但是您发现getSelectionIndex()没有为您提供旧选项卡。因此,您必须自己维护旧的选项卡索引。

这是Eclipse FormEditor使用的技术。