处理 SWT 模态 shell 之前的进一步代码 运行
Further code running before SWT modal shell is disposed
首先,我是 SWT 的新手(非常习惯 Swing,但试图扩展到不同的工具,并希望我的应用程序具有更原生的外观和感觉)。抱歉,如果我问的是显而易见的问题。
因此,在我的 SWT 应用程序中,我正在编写一个基本表单(Shell
),其中有一个 table 以及来自数据库的数据。
此表单上的 Edit
按钮会弹出另一个模态 Shell
,其中包含来自所选 table 行的数据,并允许用户编辑数据并保存它。
启动编辑表单的代码:
EditForm frm = new EditForm(this, ...); // (other custom parameters specific to my application)
// should only run AFTER the form is disposed
refresh();
refresh()
方法清除 table 中的所有行,并使用数据库中的更新数据重新填充它。
问题是,一显示EditForm
,refresh()
方法就是运行。这告诉我它的行为是异步的。
EditForm
绝对是模态的:
public class EditForm extends Shell {
public EditForm(Shell parent, ...) {
super(Display.getCurrent(), SWT.TRIM | SWT.APPLICATION_MODAL);
}
}
SWT Shell
对象通常会像这样异步运行吗,即使它们是模态的?有没有办法让 "force" 同步,这样 refresh()
只在 EditForm
被处理时调用?
您正在寻找的是嵌套的读取和调度循环。如果那个放在shell打开之后,循环的退出条件是'shell is still open',那么刷新代码只会在嵌套的shell关闭后才会是运行 .
例如:
while ( !nestedShell.isDisposed() ) {
if ( !display.readAndDispatch() ) {
display.sleep();
}
}
JFace 是一个通过 SWT 提供实用程序和精简抽象的库。要构建模态对话框,如果提供 Dialog
class 及其子 class 具有 setBlockOnOpen()
方法来控制阻塞行为。不幸的是,它拖入了两个左右的其他库,但要考虑一下。
首先,我是 SWT 的新手(非常习惯 Swing,但试图扩展到不同的工具,并希望我的应用程序具有更原生的外观和感觉)。抱歉,如果我问的是显而易见的问题。
因此,在我的 SWT 应用程序中,我正在编写一个基本表单(Shell
),其中有一个 table 以及来自数据库的数据。
此表单上的 Edit
按钮会弹出另一个模态 Shell
,其中包含来自所选 table 行的数据,并允许用户编辑数据并保存它。
启动编辑表单的代码:
EditForm frm = new EditForm(this, ...); // (other custom parameters specific to my application)
// should only run AFTER the form is disposed
refresh();
refresh()
方法清除 table 中的所有行,并使用数据库中的更新数据重新填充它。
问题是,一显示EditForm
,refresh()
方法就是运行。这告诉我它的行为是异步的。
EditForm
绝对是模态的:
public class EditForm extends Shell {
public EditForm(Shell parent, ...) {
super(Display.getCurrent(), SWT.TRIM | SWT.APPLICATION_MODAL);
}
}
SWT Shell
对象通常会像这样异步运行吗,即使它们是模态的?有没有办法让 "force" 同步,这样 refresh()
只在 EditForm
被处理时调用?
您正在寻找的是嵌套的读取和调度循环。如果那个放在shell打开之后,循环的退出条件是'shell is still open',那么刷新代码只会在嵌套的shell关闭后才会是运行 .
例如:
while ( !nestedShell.isDisposed() ) {
if ( !display.readAndDispatch() ) {
display.sleep();
}
}
JFace 是一个通过 SWT 提供实用程序和精简抽象的库。要构建模态对话框,如果提供 Dialog
class 及其子 class 具有 setBlockOnOpen()
方法来控制阻塞行为。不幸的是,它拖入了两个左右的其他库,但要考虑一下。