SWT Java - 将具有图像背景的复合材料放在具有图像背景的外壳上

时间:2011-11-09 11:17:10

标签: java swt

我正在使用SWT编写图形应用程序。首先,我创建了一个带有图像背景的shell(shell.setBackgroundImage(image)),然后我将一个复合材料与另一个背景图像放在一起,这样我就可以使用它(复合)在其中放置标签。问题是我无法摆脱复合材料周围的灰色边框。是否有可能完成或者还有其他方法可以做到这一点?

以下是代码:

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class Test {

    protected static int gap = 20;

    public static void main (String[] args) {

       Display display = new Display();
       Shell shell = new Shell(display);   
       Image bg_Image = new Image(display, "bg_full.png"); 
       shell.setBackgroundImage(bg_Image);
       shell.setBackgroundMode(SWT.INHERIT_FORCE);  
       shell.setFullScreen(true);

       Image bg = new Image(display, "bg.png");
       Image border = new Image(display, "bg_info.png");
       Image b1 = new Image(display, "button_total_active.png");
       Image b2 = new Image(display, "button_terminal.png");
       Image b3 = new Image(display, "button_operator.png");
       Image b4 = new Image(display, "button_contract.png");

       Composite composite = new Composite(shell, SWT.NONE);
       composite.setBackgroundImage(bg);
       composite.setBackgroundMode(SWT.INHERIT_FORCE);
       composite.setBounds(80, 220, bg.getBounds().width, bg.getBounds().height);

       Label label1 = new Label(composite, SWT.NONE);
       label1.setImage(b1);
       label1.setBounds(gap, gap, b1.getBounds().width, b1.getBounds().height);

       Label label2 = new Label(composite, SWT.NONE);
       label2.setImage(b2);
       label2.setBounds(gap, gap*2+b1.getBounds().height, b2.getBounds().width, b2.getBounds().height);

       Label label3 = new Label(composite, SWT.NONE);
       label3.setImage(b3);
       label3.setBounds(gap, gap*3+b1.getBounds().height*2, b3.getBounds().width, b3.getBounds().height);

       Label label4 = new Label(composite, SWT.NONE);
       label4.setImage(b4);
       label4.setBounds(gap, gap*4+b1.getBounds().height*3, b4.getBounds().width, b4.getBounds().height);

       Label label5 = new Label(composite, SWT.NONE);
       label5.setImage(border);
       label5.setBounds(gap*2+b1.getBounds().width, gap, border.getBounds().width, border.getBounds().height);

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

   }
}

这是sample image

1 个答案:

答案 0 :(得分:1)

这些不是灰色边框(您通过SWT.INHERIT_FORCE删除它们),这些是图像的透明角,它们不透明,因为它们后面有一个复合。据我所知,你不能使用它作为复合材料的背景去除图像的角落。如果这些角是透明的(而不是白色),您可以使用GC在壳牌上绘制此图像(不创建任何复合材料),如图所示here
放置透明图像时,将它们放在您希望在后面看到的对象上。希望我帮助你。 :)