Возможно, вы захотите попробовать отключить перерисовку при обновлении программы просмотра.
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);
}
});
}
Если пользователь нажимает клавишу Enter, вы можете запланировать обновление без задержки,