如何更改JFace WizardPage按钮的焦点?

时间:2014-07-22 14:15:50

标签: java focus jface

我已经实现了一个带有2个WizardPages的JFace向导。

默认情况下,第一个WizardPage具有以下4个按钮:

  • 返回(已停用)
  • 下一步(专注)
  • 取消
  • 完成(禁用)

现在我想在取消按钮上设置默认焦点。我该怎么做?

删除焦点并将其设置为某些对页面内容的控制也可以。

我尝试将焦点设置为WizardPage内容布局中的Button,但这只是让我第二次关注immediateButton。 “下一步”按钮的焦点仍然存在,“下一步”按钮对按下回车做出反应,这是我想要避免的。

@Override
public void setVisible(boolean visible) {
    super.setVisible(visible);
    if (visible) {
        immediateButton.setFocus();
    }
}

如何访问“对话框”按钮并更改其焦点?

1 个答案:

答案 0 :(得分:1)

“下一步”按钮实际上没有焦点,而是“Shell默认”按钮。

WizardDialog中的逻辑使Next或Finish成为默认按钮,似乎没有办法改变它。

您可以通过在向导页面中调用getShell().setDefaultButton(button)来覆盖它。

更新:对此进行测试,您可以在setVisible中执行此操作,但您需要使用Display.asyncExec来使代码在正确的时间运行:

final Shell shell = getShell();

shell.getDisplay().asyncExec(() -> shell.setDefaultButton(immediateButton));
上面的

适用于Java 8,适用于Java 7或更早版本:

shell.getDisplay().asyncExec(new Runnable()
   {
     @Override
     public void run()
     {
       shell.setDefaultButton(immediateButton); 
     }
   });