在SWT中forceFocus()和setFocus()有什么区别?

时间:2011-01-06 20:49:41

标签: swt

我不太明白这两种方法的区别。在什么情况下forceFocus()会优于setFocus()

2 个答案:

答案 0 :(得分:9)

根据 SWT:标准窗口小部件工具包,第1卷 ,forceFocus():

  

强制控件接收键盘   事件。通常没有的控件   接受键盘输入将获得焦点   使用这种方法。如果焦点不能   因任何原因而被指派,是假的   返回。

也:

  

一般来说,强迫关注是   你永远不想做的事情。   例如,强制关注标签   由于标签不是很有用   不要以表示的方式画画   他们可以接受输入。强迫关注   一个不期望它的控制   可以混淆用户,因为他们没有   想法他们的击键去哪里。   应用程序应始终使用   setFocus()指定焦点。

答案 1 :(得分:4)

在这个问题上迟到了,但我刚刚完成了一个与此相关的长时间的反对墙会议,并且认为我会做一个快速的报告:

如果您的控件有子项,setFocus(myControl)将在子树下进行深度优先搜索,并将焦点设置为最低的第一个孩子。另一方面,forceFocus(myControl)只会将焦点设置为myControl并完成它。

我遇到了一个带有GridLayout的无模式对话框的情况,其中大多数网格单元是一组需要焦点的Canvas子类对象。 (是的,这有点奇怪,但我希望能够将鼠标悬停在一个单元格上并输入内容。)网格中的最后一个控件是一个“完成”按钮,我将其设置为默认选项。

当鼠标离开画布单元格时,我正在做setFocus(myDialogShell),它立即将焦点设置到第一个画布元素,防止“完成”按钮接收\ r并处理整个肮脏的业务。另一方面,forceFocus(myDialogShell)成功了。