當我在後臺運行一個操作時,我將光標設置爲忙,直到進程完成。是否還有一種方法可以灰化並禁用當前的顯示/對話框/外殼,直到過程完成。我想通過視覺讓用戶知道某些內容正在工作,他們必須等待。運行打印機操作SWT - 灰掉並禁用當前shell
編輯
plotButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event arg0) {
getShell().setEnabled(!getShell().getEnabled());
getShell().setCursor(new Cursor(Display.getCurrent(), SWT.CURSOR_WAIT));
recursiveSetEnabled(getShell(), getShell().getEnabled());
startPrinterListOperation(); <== This is method that runs operation
}
});
方法。
private void startPrinterListOperation() {
listOp = new AplotPrinterListOperation(appReg.getString("aplot.message.GETPRINTERLIST"), session);
listOp.addOperationListener(new MyOperationListener(this) {
public void endOperationImpl() {
try {
printers.clear();
printers.addAll((ArrayList<PrinterProfile>) listOp.getPrinters());
Display.getDefault().asyncExec(new Runnable() {
public void run() {
showAplotPlotterDialog(); <== When operation returns - opens selection dialog
}
});
}
finally {
listOp.removeOperationListener(this);
listOp = null;
}
}
});
session.queueOperation(listOp);
} // end startPrinterListOperation()
showAplotPlotterDialog()(獨立的類)打開與網絡打印機對話框,然後用按鈕按壓發送作業到選定的打印機。當該操作完成時,繪圖儀對話框關閉 - 這是該方法的結束 - baseDialog是主GUI
finally {
plotOp.removeOperationListener(this);
plotOp = null;
Display.getDefault().asyncExec(new Runnable() {
public void run() {
baseDialog.removeAllTableRows();
baseDialog.plotRequestCompleted = true;
baseDialog.setResultsButtonVisibility();
getShell().close();
}
});
}
當您的操作完成時,只需調用'recursiveSetEnabled(shell,true);'。 – Baz
然後調用'getShell()。setEnabled(!getShell()。getEnabled());''。 – Baz
是的 - 這很好用!謝謝BAZ – jkteater