I need to draw multiple canvases on a Scrollable Composite in Eclipse rcp, and put them in a gridlayout. I managed to achieve this, but I'm stuck with adjusting the GridLayouts Cell-Size.
What I would like to have is for the grid to dynamically adjust the size of each canvas (or at least set the size manually) but make the GridLayout fill the complete space of the parent component.
What I have so far:
public class Test {
public static void main(final String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final ScrolledComposite sComp = new ScrolledComposite(shell, SWT.H_SCROLL | SWT.V_SCROLL);
final Composite fillComp = new Composite(sComp, SWT.NONE);
GridLayoutFactory.createFrom(new GridLayout(10, true)).applyTo(fillComp);
for (int i = 0; i < 500; i++) {
final Canvas c = new Canvas(fillComp, SWT.DOUBLE_BUFFERED);
c.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
e.gc.setBackground(display.getSystemColor(new Random().nextInt(20)));
e.gc.fillRectangle(0, 0, 200, 200);
}
});
}
sComp.setContent(fillComp);
fillComp.pack();
shell.open();
shell.pack();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
I assumed that setting the Parent Component's layout to FillLayout would do the trick, but it doesn't work. I think I need to work with a GridData Object, but I'm a little lost here.