javaeclipsebuttonswtwindowbuilder

Java SWT: setSize() not working on Button control


I have an ArrayList of buttons, and I'm trying to set all the buttons the same size of the last button.

This is my code:

ArrayList <Button> buttons = new ArrayList<Button>();
Composite numbersComposite = new Composite(composite, SWT.NONE);
numbersComposite.setLayout(new GridLayout(5, true));
    
for (int i=0; i<=49; i++) { 
    Button b = new Button(numbersComposite, SWT.TOGGLE);
    b.setText(""+i);
    buttons.add(b);
}

for (Button b : buttons) {
    b.setSize(buttons.get(buttons.size()-1).getSize());
}

Something is wrong because not all the buttons have the same size. Is there any problem with setSize method on Buttons with TOGGLE style?

Edit

I see that buttons.get(buttons.size()-1).getSize() is giving a Point with 0,0 value. Why?

Edit 2

I tried with this code but nothing happens! not all of them have the same size. Why is this?

Point point = new Point(20, 20);
for (Button b : buttons) {
    b.setSize(point);
}

Solution

  • You are mixing layouts with absolute positioning, which doesn't work.

    setSize will only work when you are not using layouts.

    If you are using layouts (which is usually the best choice) then you should set the appropriate layout data to the components you want to display.

    Since you are using GridLayout for the parent Composite, its children should set GridData as layout data; for example this GridData will make the buttons use all the available space in the parent Composite:

    for (int i = 0; i <= 49; i++) {
        Button b = new Button(numbersComposite, SWT.TOGGLE);
    
        // set the layout data
        GridData buttonLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
        b.setLayoutData(buttonLayoutData);
    
        b.setText("" + i);
        buttons.add(b);
    }
    

    Look to the constructors of GridData to see which other options you have.

    Look here to know more about layouts in SWT: http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html