您可能想在嘗試更新查看器時關閉重繪。
Viewer.getControl().setRedraw(false);
// update
Viewer.getControl().setRedraw(true);
它有時可以提供更好的用戶體驗。您還可以安排在用戶點擊新密鑰或修改文本時取消的工作。例如。
class RefreshJob extends WorkbenchJob
{
public RefreshJob()
{
super("Refresh Job");
setSystem(true); // set to false to show progress to user
}
public IStatus runInUIThread(IProgressMonitor monitor)
{
monitor.beginTask("Refreshing", ProgressMonitor.UNKNOWN);
m_viewer.refresh();
monitor.done();
return Status.OK_STATUS;
};
}
然後在單獨的作業中重新安排刷新。
private RefreshJob m_refreshJob = new RefreshJob();
private Text m_filterText;
void hookModifyListener()
{
m_filterText.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
m_refreshJob.cancel();
m_refreshJob.schedule(500);
}
});
}
如果用戶點擊回車鍵,你可以安排一個刷新作業沒有延遲,
謝謝!我最終實際上使用了這兩個概念,並且他們工作得很好。 解決未來的問題:'monitor.beginTask(「Refreshing」,ProgressMonitor.UNKNOWN);'應該是'IProgressMonitor.UNKNOWN' – mwalling 2010-02-18 21:41:00
這應該在JFace/Workbench Job文檔中。非常感謝! – zedoo 2012-08-01 13:12:31