在处理SWT模式外壳之前,进一步运行的代码



首先,我对SWT非常崭新(非常习惯,但试图分支到其他工具上,并希望对我的应用更具本地的外观和感觉(。抱歉,如果我问明显的问题。

因此,在我的SWT应用程序中,我正在编写一个基本表单(a Shell(,该表包含一个带有数据库数据的表。

此表格上的Edit按钮弹出了另一个包含来自选定表行的数据的模态Shell,并允许用户编辑数据并保存数据。

启动编辑表格的代码:

EditForm frm = new EditForm(this, ...); // (other custom parameters specific to my application)
// should only run AFTER the form is disposed
refresh();

refresh()方法清除了表格中的所有行,并通过数据库中的更新数据重新填充。

问题是,refresh()方法在显示EditForm后立即运行。这告诉我它的行为异步。

EditForm绝对是模态:

public class EditForm extends Shell {
    public EditForm(Shell parent, ...) {
        super(Display.getCurrent(), SWT.TRIM | SWT.APPLICATION_MODAL);
    }
}

swt Shell是否通常会像这种模态一样行事异步?有没有一种方法可以"强制"它同步,因此仅在处理EditForm时才称为refresh()

您要寻找的是嵌套读取循环。如果在打开外壳之后放置,并且循环的退出条件是"外壳仍然打开",则刷新代码仅在关闭嵌套外壳后才运行。

例如:

while ( !nestedShell.isDisposed() ) {
  if ( !display.readAndDispatch() )  {
    display.sleep();
  }
}

jface是一个库,可在SWT上提供实用程序和薄薄的抽象。为了构建模态对话框,如果提供具有setBlockOnOpen()方法的Dialog类及其子类,以控制阻止行为。不幸的是,它会拖入两个左右的其他库中,但考虑到。

相关内容

最新更新