Я пытаюсь создать оболочку, содержащую SWT-браузер. Окончательный размер оболочки рассчитывается на основе содержимого браузера, поэтому, чтобы предотвратить скачок размера оболочки, я устанавливаю для перерисовки оболочки значение false и повторно активирую ее только в ProgressListener браузера. Если я сделаю это так, то после перерисовки обычная тень оболочки исчезнет. У меня Windows 10.
final Shell shell = new Shell(parentShell, SWT.ON_TOP | SWT.TOOL | SWT.NO_FOCUS);
shell.setRedraw(false);
final Browser browser = new Browser(shell , SWT.NONE);
browser.setText("Example html text");
browser.addProgressListener(ProgressListener.completedAdapter(progressCompleted -> {
Point size = calculateBrowserSize();
shell.setSize(size.x, size.y);
browser.setSize(size.x, size.y);
shell.setRedraw(true);
}));
shell.open();
EDIT: Я нашел неоптимальное решение: используйте setSize вместо setRedraw. Таким образом, на долю секунды он по-прежнему показывает оболочку неправильного размера, но ее практически не видно.
final Shell shell = new Shell(parentShell, SWT.ON_TOP | SWT.TOOL | SWT.NO_FOCUS);
shell.setSize(1, 1); // (0,0) doesn't work, also produces shell without drop shadow
final Browser browser = new Browser(shell , SWT.NONE);
browser.setText("Example html text");
browser.addProgressListener(ProgressListener.completedAdapter(progressCompleted -> {
Point size = calculateBrowserSize();
shell.setSize(size.x, size.y);
browser.setSize(size.x, size.y);
}));
shell.open();
Подробнее здесь: https://stackoverflow.com/questions/790 ... t-to-false