#java #swt #eclipse-rcp
#java #swt #eclipse-rcp
Вопрос:
Я работаю над SWT В своем требовании, я хочу показать две разные формы в одном и том же месте композита одним нажатием кнопки, поэтому я создал композит с помощью StackLayout. Я могу соответствующим образом отображать обе формы (дочерние композиты с разными формами), но проблема в том, что моя одна форма с оранжевым фоном, а другая прозрачная. Когда я перехожу с прозрачного на оранжевый композит, он работает нормально. Но когда я перехожу с оранжевого на прозрачный композитный, оранжевый композитный все еще виден в фоновом режиме.И когда я переключаюсь на другое окно и возвращаюсь к своему представлению, оно показывает только прозрачный композит, который является моим требованием. Я пытаюсь, но не могу получить только прозрачный композит мгновенно по нажатию кнопки.Ниже приведен мой фрагмент кода для того же.
\ the container composite with stacklayout.
bottomComposite = new Composite(parent, SWT.NO_BACKGROUND);
bottomCompositLayOut = new StackLayout();
bottomComposite.layout(true);
\first form composite
formComposite = new Composite(bottomComposite, SWT.NONE);
GridLayout formLayout = new GridLayout(3, false);
formLayout.marginTop = 10;
formLayout.horizontalSpacing = 20;
formComposite.setLayout(formLayout);
formComposite.setBackground(orange);
GridData formCompositeData = new GridData();
formCompositeData.widthHint = 800;
formCompositeData.heightHint = 200;
formCompositeData.horizontalAlignment = SWT.CENTER;
formComposite.setLayoutData(formCompositeData);
\Second transparent composite
progressComposite = new Composite(bottomComposite, SWT.NO_BACKGROUND);
GridLayout progressLayout = new GridLayout(1, false);
progressLayout.verticalSpacing = 1;
progressLayout.marginTop = 1;
progressComposite.setLayout(progressLayout);
//progressComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
GridData progressCompositeData = new GridData();
progressCompositeData.widthHint = 800;
progressCompositeData.heightHint = 200;
progressCompositeData.horizontalAlignment = SWT.CENTER;
progressComposite.setLayoutData(progressCompositeData);
//Works properly when I am doing
bottomComposite.topcontrol = formComposite;
//Shows other form when I made transperent composite to top control.
bottomComposite.topcontrol = progressComposite;
Комментарии:
1.
SWT.NO_BACKGROUND
не означает»прозрачный» — JavaDoc говорит: «Этот стиль не означает «прозрачный» — скрытые виджеты не будут прорисовываться».2. Спасибо за ответ. Есть ли какой-либо другой способ сделать композит прозрачным. Я пробовал с помощью setBackground(SWT.COLOR_TRANSPARENT), но это не работает.
3.
setBackground(display.getSystemColor(SWT.COLOR_TRANSPARENT))
так используется COLOR_TRANSPARENT. Смотрите описание здесь и связанный фрагмент. Я не использовал это и не знаю, будет ли это делать то, что вы хотите.4. Пробовал, но не работает: (
5. @Shrikant Какую версию SWT вы используете?