TabFolder 在第一次单击后更改选择本身

TabFolder changes selection itself after first click

我创建了一个 TabFolder 和几个 TabItems

默认第一项是 selected。但是,当我在相应的 Composite 上使用第一个 mouseClick 时,TabFolder 被放置在 select 任何其他项目而不是已经 selected 的项目上,它只会 select 在恢复第一项的 selection 之前,简称此项目。
但是,在单击 TabFolder 一次并因此使其获得焦点后,一切都按预期进行。

我与 SelectionListeners 确认 reselection 没有触发 SelectionEvent,因此我认为这是某种内部行为。

有没有人以前遇到过这个问题或者知道如何阻止 TabFolder 重新select 第一个元素?

这是我创建 TabFolder:

的方式
protected void createContent(Composite parent) {  
    InfoComposite comp = new InfoComposite(parent, SWT.NONE);  
    comp.setBackground(parent.getBackground());  
    comp.setForeground(parent.getForeground());  

    parent.setLayout(new FillLayout());  
    comp.setLayout(new FillLayout());  

    folder = new TabFolder(comp, SWT.TOP);  

    // inherit color scheme  
    folder.setForeground(comp.getForeground());  
    folder.setBackground(comp.getBackground());  
}

编辑:
我应该提到这个 TabFolder 是 eclipse 中 AbstractInformationControl 的一部分。我不知道这是否与我的问题有关。

编辑 2:
我现在强烈怀疑这是一个焦点问题。我跟踪焦点,结果 TabItem 实际上并没有集中在第一次点击上。它始终是第一个 TabItem 包含的 StyledText... 只有在第二次单击时 TabFolder 才真正获得焦点。
单击其中一个选项卡时,TabFolder 是否可能没有获得焦点?

虽然我仍然不知道问题的根源,但我发现这很可能是焦点问题。

但是,由于问题只发生在第一个 mouseClick 上,因此为我完成工作的解决方法是在鼠标进入 TabFolder 的相应区域时以编程方式模拟这个第一个 mouseClick。

PlatformUI.getWorkbench().getDisplay().addFilter(SWT.MouseHover, new Listener() {

@Override
public void handleEvent(Event event) {
    // Check that this is the proper widget the action should be performed on
    event.widget.notifyListeners(SWT.MouseDown, new Event());
    event.widget.notifyListeners(SWT.MouseUp, new Event());
});

编辑:
我现在知道这个问题是由于 TabFolder 是 eclipse 中 InformationControl 的一部分,当单击它。但是我的 "enriched" 版本又是相同的 window,因此 "focus problem"