我正在寻找一种方法来为SWT CTabFolder
添加一种水印。
我的目标是标签文件夹看起来不像"无聊"如果没有标签。
我知道setBackgroundImage
的{{1}}方法。不幸的是,这似乎是不可调整的,只能在"平铺"中显示图像。格式。
您知道将中心图像添加到空标签文件夹的任何方法吗?
答案 0 :(得分:4)
您必须为Listener
和SWT.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
:
关闭项目时就像这样: