首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java SWT - Text on Transparent Shell?

Java SWT - Text on Transparent Shell?
EN

Stack Overflow用户
提问于 2009-07-27 08:01:55
回答 1查看 5.9K关注 0票数 3

在Java SWT中,有没有一种方法可以在透明的shell上绘制文本,从而只显示文本?我想做的是让文本出现在我的桌面上,没有任何背景窗口。使用shell.setAlpha()将使整个shell变得透明,包括出现在其中的任何元素(我尽量避免)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-27 08:32:49

下面是一个displaying an image without the shell示例。您可以相当容易地对其进行调整以显示文本。

更新:

好吧,我觉得无聊了。下面是一个在透明背景上绘制"Hello“的基本示例:

代码语言:javascript
复制
package swttest;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Test {

    public static void main(String[] args) {
        Test test = new Test();

        test.show();
    }

    public void show() {
        Display display = new Display();
        // Create a shell with no trim
        final Shell shell = new Shell(display, SWT.NO_TRIM);
        shell.setForeground(display.getSystemColor(SWT.COLOR_WHITE));

        //set the transparent canvas on the shell
        Canvas canvas = new Canvas(shell, SWT.NO_BACKGROUND);

        //create an area to paint the text
        Rectangle size = new Rectangle(0, 0, 200, 200);
        canvas.setBounds(size);

        Region region = canvas.getRegion();

        //mucking about with fonts
        Font font = display.getSystemFont();

        FontData[] fd = font.getFontData();

        fd[0].setHeight(24);
        fd[0].setStyle(SWT.BOLD);

        Font bigFont = new Font(display, fd[0]);
        canvas.setFont(bigFont);

        // define the shape of the shell using setRegion
        shell.setRegion(region);
        shell.setSize(size.width, size.height);

        canvas.addPaintListener(new PaintListener() {
            public void paintControl(PaintEvent e) {
                e.gc.drawString("Hello", 10, 10, true);
            }
        });

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        region.dispose();
        display.dispose();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1186980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档