是否可以在用户不必点击按钮的情况下打开和关闭messagedialog?
当用户单击表单上的按钮时,该按钮的操作将转到服务器端并收集项目列表,需要几秒钟。我想要一种方法告诉用户该操作正在进行中。我在想一个带有一些文字的messagedialog。 。
打开消息
MessageDialog.openInformation(shell, "Information", "Getting List From Server");
然后有些人如何关闭它
(像MessageDialog.close
)?
我看了一个进度条,但这比我真正需要的还要多。
答案 0 :(得分:3)
起初看起来可能看起来很大,但我建议使用IProgressMonitor
来显示您的任务进度。
用户会知道他/她看到进度条时会发生什么,而不是看起来像gui被冻结的对话框。
Here是Eclipse关于如何正确使用进度监视器的文章。
如果您真的想采纳您的想法(我不建议),您可以尝试以下方法:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
BazMessageDialog dialog = new BazMessageDialog(shell, "Information", null, "Getting List From Server", MessageDialog.INFORMATION, new String[]{"OK", "Cancel"}, 0);
dialog.open();
/* Do your stuff */
dialog.reallyClose();
shell.dispose();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static class BazMessageDialog extends MessageDialog
{
public BazMessageDialog(Shell parentShell, String dialogTitle,
Image dialogTitleImage, String dialogMessage,
int dialogImageType, String[] dialogButtonLabels,
int defaultIndex) {
super(parentShell, dialogTitle, dialogTitleImage, dialogMessage,
dialogImageType, dialogButtonLabels, defaultIndex);
setBlockOnOpen(false);
}
public void reallyClose()
{
cancelPressed();
}
}
然而,这不会阻止你剩下的gui,因此用户可以在此期间使用它。
修改强>:
刚刚发现,Opal有一个叫InfiniteProgressPanel的东西,可能适合你。看看......