我创建了一个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
是否可能无法聚焦?
答案 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
的一部分引起的,它打开了一个不同的"窗口(一个丰富的")点击它。然而,我的"丰富"版本是同一个窗口,因此焦点问题"