5

親 Composite で GridLayout を使用しており、オブジェクトのレンダリング中に作成された 1px のパディングを削除したいと考えています。この部分を機能させるために変更するパラメータは何ですか? 私のコンポジットはこのようにレンダリングされます

final Composite note = new Composite(parent,SWT.BORDER);
GridLayout mainLayout = new GridLayout(1,true);
mainLayout.marginWidth = 0;
mainLayout.marginHeight = 0;
mainLayout.verticalSpacing = 0;
mainLayout.horizontalSpacing = 0;
note.setLayout(mainLayout);

画像:

ここに画像の説明を入力

4

1 に答える 1

7

SWT.BORDERあなたの問題を引き起こしています。Windows 7 では、1 つはグレー、もう 1 つは白の 2px の境界線を描画します。SWT.NONE境界線を完全に取り除くために使用します。

本当に 1px の灰色の境界線が必要な場合は、親にListenerforを追加して、次のように境界線を描画させることができます。SWT.PaintCompositeGC

public static void main(String[] args)
{
    final Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(1, false));

    final Composite outer = new Composite(shell, SWT.NONE);
    outer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    GridLayout layout = new GridLayout(1, false);
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    outer.setLayout(layout);

    Composite inner = new Composite(outer, SWT.NONE);
    inner.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
    inner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    shell.addListener(SWT.Paint, new Listener()
    {
        public void handleEvent(Event e)
        {
            e.gc.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BORDER));
            Rectangle rect = outer.getBounds();
            Rectangle rect1 = new Rectangle(rect.x - 1, rect.y - 1, rect.width + 2, rect.height + 2);
            e.gc.setLineStyle(SWT.LINE_SOLID);
            e.gc.fillRectangle(rect1);
        }
    });

    shell.pack();
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

次のようになります。

ここに画像の説明を入力

そしてここに緑色の背景があります:

ここに画像の説明を入力

于 2013-10-21T15:41:22.557 に答える