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);
}
};
}
3条答案
按热度按时间zfciruhq1#
相反,您可以尝试执行以下操作来获得相同的结果。
文本将出现在图像上方。您将能够看到图像。
(仅显示相关代码)带文本/图像的标签示例。
既然你想制作按钮,你可以使用同样的逻辑,也可以使用“按钮”API。你可以创建一个带有图像的按钮,然后在上面设置任何文本。
(仅显示相关代码)按钮示例
我希望这就是你想做的。
dxpyg8gm2#
而不是
做
它将使背景透明,按照the documentation
tkclm6bt3#
写一个没有背景的文本(作为标签)看起来很简单,只有在Canvas中使用GC类作为paint例程才有可能。我已经为此编写了Canvas的继承:
它的工作原理与org.eclipse.swt.widgets.Label类似。
我还在尝试改进解决方案(缺少setAlignment)。您可以访问www.vishia.org/Java上的结果