Макет стека с прозрачным составным SWT

#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 вы используете?