SWT CTabFolder:添加水印(如果没有标签)

时间:2014-09-08 12:10:19

标签: java swt

我正在寻找一种方法来为SWT CTabFolder添加一种水印。 我的目标是标签文件夹看起来不像"无聊"如果没有标签。

我知道setBackgroundImage的{​​{1}}方法。不幸的是,这似乎是不可调整的,只能在"平铺"中显示图像。格式。

您知道将中心图像添加到空标签文件夹的任何方法吗?

1 个答案:

答案 0 :(得分:4)

您必须为ListenerSWT.Paint添加自己的SWT.Resize。然后在Image上绘制GC。这是一个例子:

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout());

    final Image image = new Image(null, "info.png");

    final CTabFolder folder = new CTabFolder(shell, SWT.TOP);
    folder.addListener(SWT.Paint, new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            if (image.isDisposed())
                return;

            Rectangle parentSize = folder.getBounds();
            int tabHeight = folder.getTabHeight();
            Rectangle imageSize = image.getBounds();

            event.gc.drawImage(image, (parentSize.width - imageSize.width) / 2, (parentSize.height - imageSize.height + tabHeight) / 2);
        }
    });
    folder.addListener(SWT.Resize, new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            folder.redraw();
        }
    });

    CTabItem item = new CTabItem(folder, SWT.CLOSE);
    item.setText("TEST");

    Composite content = new Composite(folder, SWT.NONE);

    content.setLayout(new FillLayout());

    new Label(content, SWT.NONE).setText("bla");

    item.setControl(content);

    shell.pack();
    shell.setSize(400, 200);
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();

    image.dispose();
}

如果您有CTabItem

,就会这样

enter image description here

关闭项目时就像这样:

enter image description here