如何确定CTabItem内图像的正确位置

时间:2015-04-29 15:02:58

标签: java swt tooltip ctabitem

我将一些带有CTabItem的{​​{1}}添加到Image

CTabFolder

tabItems

然后我想创建一个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修改后查看其边框的提取图像:delete.png

0 个答案:

没有答案