我将一些带有CTabItem
的{{1}}添加到Image
:
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
上,就会显示。{/ p>
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
修改后查看其边框的提取图像: