在Java SWT中,我能否将一个标签放在另一个标签的上面,并使上面的标签具有透明背景?我正在一个扩展Composite类的类中进行此操作,因为我想要创建一个自定义的SWT“花式按钮”,由2个标签组成。因此,下面的标签将是仅包含图像的标签,而上面的标签将是“花式按钮”的文本标签。但是,上面的标签必须具有透明背景,以免覆盖其下面的图像。目前,上面的标签正在覆盖下面的标签。你有什么好的建议吗?谢谢!
相反,您可以尝试以下方法以获得相同的结果。
文本将出现在图像上方。您将能够看到图像。
( 仅显示相关代码 ) 标签与文本/图像示例。
Image image = new Image(display, "c:\\picture.jpeg");
Shell shell = new Shell(SWT.NO_TRIM);
shell.setBounds(10,10,200,200);
shell.setBackgroundImage(image);
shell.setBackgroundMode(SWT.INHERIT_DEFAULT);
Label label = new Label(shell, SWT.NONE);
label.setText("LAbel text here. ");
既然你想制作按钮,那么你可以使用相同的逻辑,同时使用“Button”API。你可以创建一个带有图像的按钮,然后在其上方设置任何文本。
(仅显示相关代码) 按钮示例
Button button = new Button(shell, SWT.PUSH);
button.setImage(image);
button.setText("Click Me");
我希望这就是你想要做的。
在编程中,如果想要在标签上写文本而不带背景,似乎只有使用GC类进行绘制才是最简单的方法。我已经为此编写了一个Canvas的继承类:
public class SwtTransparentLabel extends Canvas {
String text = "";
Font font = null;
public SwtTransparentLabel(Composite parent, int style) {
super(parent, style | SWT.TRANSPARENT);
addPaintListener(paintListener);
}
public void setText (String string) {
text = string;
}
public void setFont (Font font) {
this.font = font;
}
/**The listener for paint events. It is called whenever the window is shown newly. It does the work for graphic output. */
protected PaintListener paintListener = new PaintListener() {
@Override public void paintControl(PaintEvent e) {
GC gc = e.gc;
if(font !=null){ gc.setFont(font); }
//no: gc.setAlpha(100); //... experience, not necessary
gc.drawString(text, 0, 0, true);
}
};
}
这个工作方式类似于org.eclipse.swt.widgets.Label。
我仍在努力改进解决方案(缺少setAlignment)。 您可以访问www.vishia.org/Java上的结果。