setFocus()总是false

时间:2010-01-27 15:31:57

标签: java eclipse user-interface swt rcp

我正在研究Eclipse RCP应用程序。在扩展MultiPageEditorPart的类中,我正在尝试将焦点设置为文本字段。但是setFocus方法总是返回false。

我做错了什么?

MultiPageEditor有各种页面,在这些页面中,有Composite - 类。这些类包含文本字段。

以下是片段:( errorPage是一个int,我的验证发现错误的Pagenumber)

if(!dataValid) {
   MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Fehler bei der Dateneingabe", stringBuilder.toString());
   this.setActivePage(errorPage);
   Composite errorComposite = (Composite) this.getControl(errorPage);
   Control[] children = errorComposite.getChildren();
   for (Control child : children) {
    if(child instanceof Form) {
     Form form = (Form) child;
     Composite body = form.getBody();
     Control[] formChildren = body.getChildren();
     for (Control formChild : formChildren) {
      if(formChild.equals(errorControl)) 
                            formChild.setFocus();
      return dataValid;
     } 
    }
   }
  }

2 个答案:

答案 0 :(得分:3)

在以下情况下,setFocus()可能会返回false:

  1. 也许控件是像Label
  2. 这样的无法控制的控件
  3. 复合材料试图在自己关注焦点之前将注意力集中在他们的孩子身上
  4. 如果控件被禁用或隐藏,控件将无法获得焦点
  5. 输入因模态而被阻止。
  6. 所以我最好检查,(1)我将焦点设置在正确的控件上,(2)控件是否可见,可能包含控件的表单不在当前选中的选项卡中。 (3)打开任何其他模态对话框。

答案 1 :(得分:0)

您是否尝试过Control#forceFocus()?