Java SWT标签中的透明背景

q3aa0525  于 2022-12-21  发布在  Java
关注(0)|答案(3)|浏览(251)

在Java SWT中,我可以将一个标签放在另一个标签的上面,然后将标签放在上面以获得透明的背景吗?
我在一个扩展Composite的类中这样做,因为我想创建一个自定义的SWT "fancy button",有2个标签。所以下面的标签将是只包含一个图像的标签,而上面的标签将是包含"fancy button"文本的标签。但是上面的标签必须有一个透明的背景,以便不覆盖下面的图像。
当前,顶部的标签覆盖了下面的标签。
你知道我该怎么做吗?
谢谢!

zfciruhq

zfciruhq1#

相反,您可以尝试执行以下操作来获得相同的结果。

  • 创建标签
  • 使用 shell 将图像指定给标签
  • 然后使用“setText()”在标签上写入内容。

文本将出现在图像上方。您将能够看到图像。
(仅显示相关代码)带文本/图像的标签示例。

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. ");

既然你想制作按钮,你可以使用同样的逻辑,也可以使用“按钮”API。你可以创建一个带有图像的按钮,然后在上面设置任何文本。
(仅显示相关代码)按钮示例

Button button = new Button(shell, SWT.PUSH);
button.setImage(image);
button.setText("Click Me");

我希望这就是你想做的。

dxpyg8gm

dxpyg8gm2#

而不是

drawString("text", x, y)

drawString("text", x, y, true)

它将使背景透明,按照the documentation

tkclm6bt

tkclm6bt3#

写一个没有背景的文本(作为标签)看起来很简单,只有在Canvas中使用GC类作为paint例程才有可能。我已经为此编写了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上的结果

相关问题