Настройка размера ячейки GridLayout — рисование нескольких холстов?

Мне нужно нарисовать несколько холстов на прокручиваемом композите в Eclipse rcp и поместить их в сетку. Мне удалось добиться этого, но я застрял с настройкой размера ячейки GridLayouts.

Я хотел бы, чтобы сетка динамически регулировала размер каждого холста (или, по крайней мере, устанавливала размер вручную), но заставляла GridLayout заполнять все пространство родительского компонента.

Что у меня есть до сих пор:

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();
      }
    }
  }
}

Я предположил, что настройка макета родительского компонента на FillLayout поможет, но это не сработает. Я думаю, что мне нужно работать с объектом GridData, но я немного потерялся здесь.


person fabian    schedule 14.11.2011    source источник


Ответы (1)


вы можете создать два объекта GridData и установить для них значения: одно для неактивных ячеек и одно для активных ячеек. Например:

GridData Acrive = new GridData();
Active.widthHint = 200;
Active.heightHint = 200;

GridData Deactive = new GridData();
Deactive.widthHint = 100;
Deactive.heightHint = 100;

затем в методе прослушивания вы можете управлять текущим размером ячейки холста, установив его LayoutData, например:

c.setLayoutData(Active);

or

c.setLayoutData(Deactive);
person Hekmatof    schedule 14.11.2011