我不太明白这两种方法的区别。在什么情况下forceFocus()
会优于setFocus()
?
答案 0 :(得分:9)
根据 SWT:标准窗口小部件工具包,第1卷 ,forceFocus():
强制控件接收键盘 事件。通常没有的控件 接受键盘输入将获得焦点 使用这种方法。如果焦点不能 因任何原因而被指派,是假的 返回。
也:
一般来说,强迫关注是 你永远不想做的事情。 例如,强制关注标签 由于标签不是很有用 不要以表示的方式画画 他们可以接受输入。强迫关注 一个不期望它的控制 可以混淆用户,因为他们没有 想法他们的击键去哪里。 应用程序应始终使用 setFocus()指定焦点。
答案 1 :(得分:4)
在这个问题上迟到了,但我刚刚完成了一个与此相关的长时间的反对墙会议,并且认为我会做一个快速的报告:
如果您的控件有子项,setFocus(myControl)
将在子树下进行深度优先搜索,并将焦点设置为最低的第一个孩子。另一方面,forceFocus(myControl)
只会将焦点设置为myControl并完成它。
我遇到了一个带有GridLayout的无模式对话框的情况,其中大多数网格单元是一组需要焦点的Canvas子类对象。 (是的,这有点奇怪,但我希望能够将鼠标悬停在一个单元格上并输入内容。)网格中的最后一个控件是一个“完成”按钮,我将其设置为默认选项。
当鼠标离开画布单元格时,我正在做setFocus(myDialogShell)
,它立即将焦点设置到第一个画布元素,防止“完成”按钮接收\ r并处理整个肮脏的业务。另一方面,forceFocus(myDialogShell)
成功了。