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"
我创建了一个 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"