java - 为什么eclipse swt浏览器没有焦点?

标签 java eclipse eclipse-rcp

我正在开发 Eclipse RCP 应用程序。我有一个继承自 IWorkbenchPreferencePage 的首选项页面。在首选项页面中,我有一个按钮,单击该按钮会生成一个外壳。 shell 始终处于失焦状态,并且在首选项页面被处理之前无法与之交互。

有什么方法可以将焦点设置在 shell 上吗?

这是首选项页面的一些伪代码:

public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

  AuthenticationManager authenticationManager = new AuthenticationManager();

  @Override
  protected void createFieldEditors() {
    final Button login = new Button(getFieldEditorParent(), SWT.PUSH);
    login.setText("Login")
    login.addSelectionListener(new SelectionListener() {
      @Override
      public void widgetSelected(final SelectionEvent se) {
        authenticationManager.run(getShell().getDisplay());
      }
    }
  }
}

public AuthenticationManager {
  public void run(@Nullable Display optionalDisplay) {
    display.asyncExec(() -> {
      // set the url & add listeners
    }
  }
}

谢谢!

最佳答案

我通过传递外壳而不是显示来解决这个问题。我仍然找不到适当的 swt 文档来解释为什么它有效,但无论如何,这就是我的解决方案现在的样子:

public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

  AuthenticationManager authenticationManager = new AuthenticationManager();

  @Override
  protected void createFieldEditors() {
    final Button login = new Button(getFieldEditorParent(), SWT.PUSH);
    login.setText("Login")
    login.addSelectionListener(new SelectionListener() {
      @Override
      public void widgetSelected(final SelectionEvent se) {
        authenticationManager.run(getShell());
      }
    }
  }
}

public AuthenticationManager {
  public void run(@Nullable Shell optionalShell) {
    final Display display;
    if (optionalShell == null) {
        if (PlatformUI.isWorkbenchRunning()) {
            display = PlatformUI.getWorkbench().getDisplay();
        } else {
            display = null;
        }
    } else {
        display = optionalShell.getDisplay();
    }


    display.syncExec(() -> {
      // set the url & add listeners
    }
  }
}

关于java - 为什么eclipse swt浏览器没有焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62072422/

相关文章:

java - 将 TextView 链接到 Android 按钮

java - 如何在不同的Java项目中使用相同的方法

java - 我想在运行时在 Eclipse RCP 应用程序中重新加载插件

java - 如何使用 Eclipse 拖放获取源和目标小部件

java - 是否可以在不激活插件的情况下触发 RCP-Plugin 中的一系列操作?

java - 如何在没有初始化的情况下将图像转换为 BufferedImage?

java - 我的 Java Hashmap 实现存在问题

java - 是否有开源插件可以根据 Findbugs Report 在 JIRA 中标记问题?

java - gwt - 调用异步函数时在 Web 模式下出错

java - 将库 JAR 文件添加到 EJB 项目