Java SWT复合1 px填充

Java SWT复合1 px填充,java,swt,Java,Swt,我在父合成上使用GridLayout,并希望消除渲染对象时创建的1px填充。要使此零件工作,需要更改哪些参数?我的合成图是这样渲染的 final Composite note = new Composite(parent,SWT.BORDER); GridLayout mainLayout = new GridLayout(1,true); mainLayout.marginWidth = 0; mainLayout.marginHeight = 0; mainLayout.verticalSp

我在父合成上使用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);
图片:


SWT.BORDER导致您的问题。在Windows7上,它将绘制一个2px的边框,一个灰色,一个白色。使用
SWT.NONE
完全去除边界

如果您确实想要1px的灰色边框,您可以为
SWT添加
侦听器
。将
绘制到您的
组合的父级
,并使其使用
GC
绘制边框:

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();
}
看起来像这样:

这里是绿色背景:


你在说什么?在灰色边框和蓝色框之间,有一条1像素的细白线。不知何故,我想删除它。它是由
SWT.BORDER
引起的。使用
SWT.NONE
去除填充。那么SWT.BORDER实际上添加了2倍的边框?一个灰色,一个白色?@johny000,没错。(至少这是Windows7的行为)