我将一些CTabItem
带有Image
s 的 s 添加到 a CTabFolder
:
CTabFolder tabFolder = new CTabFolder(someSection, SWT.BORDER);
ImageDescriptor deleteImageDesc = sharedImages.getImageDescriptor(ISharedImages.IMG_ETOOL_DELETE);
Image deleteImage = deleteImageDesc.createImage();
CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
tabItem.setImage(deleteImage);
// add more tabs...
然后我想创建一个ToolTip
如果用户将鼠标移到deleteImage
.
ToolTip deleteToolTip = new ToolTip(getShell(), SWT.BALOON);
deleteToolTip.setMessage("Delete");
tabFolder.addMouseTrackListener(new MouseTrackAdapter()
{
@Override
public void mouseHover(MouseEvent e)
{
toolTip.setLocation(tabFolder.toDisplay(e.x, e.y));
toolTip.setVisible(doesAnyOfTabImagesContainPoint(mousePosition));
}
});
要实现方法doesAnyOfTabImagesContainPoint
,我需要确定每个deleteImage
. 因为CTabItem
不是Control
我不能使用的方法toDisplay
。我尝试通过手动确定deleteImage
相对于tabFolder
. 这会有所帮助,因为所持有的鼠标位置MouseEvent
也相对于tabFolder
.
private boolean doesAnyOfTabImagesContainPoint(Point p)
{
for (CTabItem tabItem : tabFolder.getItems())
{
Image i = tabItem.getImage();
Rectangle tabItemBounds = tabItem.getBounds();
Rectangle imageBounds = i.getBounds();
imageBounds.x += tabItemBounds.x;
imageBounds.y += tabItemBounds.y;
if (imageBounds.contains(p))
return true;
}
return false;
}
正常工作的要求是Rectangle
返回的i.getBounds()
具有相对于 的正确位置tabItem
。然而,它返回(0, 0, 16, 16)
这是不可能的。
解决此问题的一种肮脏方法是仅添加一些常量:
imageBounds.x += bsTabBounds.x + 4;
imageBounds.y += bsTabBounds.y + 3;
但我想知道是否有更好的方法。我正在尝试研究如何CTabFolder
定位标签的图像,但现在还没有成功。任何帮助,将不胜感激。提前致谢。
编辑:出于测试目的,这是我从中获得的提取图像,ISharedImages
以查看其边框: