【发布时间】:2011-11-09 10:05:07
【问题描述】:
我有一个奇怪的问题:有一个带有复合的 SectionPart,它是从 FormToolkit#createComposite(getSection()) 创建的。 Composite 包含一些小部件,它们垂直放置在另一个下方(如通常的形式)。当光标在某个小部件内时,假设输入字段,并且我在空白区域的两个字段之间单击右键,然后焦点自动跳转到此组合中的第一个字段。
我尝试将 SWT.NO_FOCUS 样式位设置为表单中的第一个小部件(通常是 TableComboViewer),但没有帮助(似乎,该位未在 TableCombo 上设置,它在里面TableComboViewer)。
那么,有没有人遇到过类似的情况,或者是否有任何解决此问题的方法或任何线索?
Upd1:设置 NO_FOCUS 样式有助于非 TableComboViewer 小部件(在这种情况下,它们没有获得焦点)。如果 TableComboViewer TableCombo 小部件包含接收焦点的文本小部件,但即使我添加 NO_FOCUS 位,它也不会应用于文本样式。我检查了 TableCombo 的来源,并且有一个方法 checkStyle,它执行以下操作:
private static int checkStyle (int style) {
int mask = SWT.BORDER | SWT.READ_ONLY | SWT.FLAT | SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
return SWT.NO_FOCUS | (style & mask);
}
我实际上不确定它的作用,因为我在按位运算方面不是很好,但似乎这就是问题所在,为什么我不能设置 NO_FOCUS 标志。
但我不明白,为什么当我点击 Composite 时,它会尝试在它的孩子上设置 foxus,我可以以某种方式抑制它吗?
Upd2:原因大概找到了,据说是:
当视图被激活时,焦点被转移到表单,它把它传递给第一个能够接受焦点的控件,在这个例子中是我们的链接。
而且看来,这是不可能禁止的。
提前致谢, 亚历克斯G
【问题讨论】:
标签: java eclipse forms swt jface