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