Search code examples
javauser-interfaceswtscrolledcomposite

How can I show Scroll on my UI, with JAVA, SWT?


I'm trying to put a ScrolledComposite on my UI with SWT. but now it only shows blank area or something wrong.

The area to show ScrolledComposite is blank without the code, "optionCompositeAtLeft.setSize(optionCompositeAtLeft.computeSize(SWT.DEFAULT, SWT.DEFAULT)); "

This is the pic of screenshot. The optionTab should have the buttons with Scroll.... enter image description here

and with the code, it shows scroll, but too long height and narrow width. Somehow, the upper is gone, but come back when I extend the size of window with scroll disappearing.

enter image description here

I set the color of background red to make it easier to see for you. Can anyone help me make "optionCompositeAtLeft" filled in ScrolledComposite? I want the left area of Option tab to be filled with a red background from "optionCompositeAtLef".

Below is my code.

private BomCloneDialog dialog = null;
private TabFolder tabFolder = null;
private TabItem tabOption = null;

public CreateOptionTab(TabFolder tabFolder, TabItem tabOption) {
    this.tabFolder = tabFolder;
    this.tabOption = tabOption;
}

public void createOptionTabUI() {
    GridData gdWithFillBoth = new GridData(GridData.FILL_BOTH);

    Composite optionComposite = new Composite(tabFolder, SWT.NONE);
    optionComposite.setLayout(new GridLayout(2, true));
    tabOption.setControl(optionComposite);

    ScrolledComposite scrolledCompositeForOption = new ScrolledComposite(optionComposite,SWT.V_SCROLL | SWT.BORDER);
    scrolledCompositeForOption.setLayoutData(gdWithFillBoth);

    Composite optionCompositeAtLeft = new Composite(scrolledCompositeForOption, SWT.BORDER);
    scrolledCompositeForOption.setContent(optionCompositeAtLeft);
    optionCompositeAtLeft.setLayout(new GridLayout(1, true));
    optionCompositeAtLeft.setLayoutData(gdWithFillBoth);
    optionCompositeAtLeft.setBackground(new Color(Display.getCurrent(), 255,0,0));

    Button b [] = new Button[30];
    for(int a=0; a<30; a++){
        b[a] = new Button(optionCompositeAtLeft, SWT.PUSH);
        b[a].setText("button"+a);
    }
    **optionCompositeAtLeft.setSize(optionCompositeAtLeft.computeSize(SWT.DEFAULT, SWT.DEFAULT));**




    Composite optionButtonComposite = new Composite(optionComposite, SWT.BORDER);
    optionButtonComposite.setLayout(new GridLayout(1, true));
    optionButtonComposite.setLayoutData(gdWithFillBoth);
    Button optionSaveButton = new Button(optionButtonComposite, SWT.NONE);
    optionSaveButton.setLayoutData(gdWithFillBoth);
    optionSaveButton.setText("Save");
    Button optionAddButton = new Button(optionButtonComposite, SWT.NONE);
    optionAddButton.setLayoutData(gdWithFillBoth);
    optionAddButton.setText("Add");

}

Solution

  • You need to configure ScrolledComposite to resize the content:

    scrolledCompositeForOption.setExpandHorizontal(true);
    scrolledCompositeForOption.setExpandVertical(true);
    

    Filled Background