EclipsercpのScrollableCompositeに複数のキャンバスを描画し、それらをグリッドレイアウトに配置する必要があります。私はなんとかこれを達成することができましたが、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オブジェクトを操作する必要があると思いますが、ここで少し迷っています。