首次点击后,TabFolder会自行更改选择

时间:2016-04-22 15:16:58

标签: java tabs swt

我创建了一个TabFolder,其中包含一些TabItems

默认情况下,选择第一个项目。但是,当我使用第一个鼠标点击相应的Composite TabFolder时,选择除已选择的项目以外的任何其他项目,它只会在恢复选择之前选择此项目。第一项。
然而,在点击TabFolder一次并因此使其获得焦点后,一切都按预期工作。

我用SelectionListeners检查了重选没有触发SelectionEvent,因此我认为这是某种内部行为。

之前是否有人遇到此问题或知道如何阻止TabFolder重新选择第一个元素?

以下是我创建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是日食中AbstractInformationControl的一部分。我不知道这是否与我的问题有关。

EDIT2:
我现在强烈怀疑这是一个焦点问题。我一直跟踪焦点,事实证明TabItem实际上并没有专注于第一次点击。它始终是第一个StyledText所包含的TabItem ...只有第二次点击,TabFolder才能获得焦点。
单击其中一个选项卡时,TabFolder是否可能无法聚焦?

1 个答案:

答案 0 :(得分:0)

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

然而,因为问题只出现在第一个鼠标上。为我做的工作的解决方法是当鼠标进入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

编辑:
我现在知道这个问题是由InformationControl是日食中df的一部分引起的,它打开了一个不同的"窗口(一个丰富的")点击它。然而,我的"丰富"版本是同一个窗口,因此焦点问题"