добавить некоторые CTabItem
с с Image
с к CTabFolder
:Как определить правильное положение изображения внутри CTabItem
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
модифицирована, чтобы увидеть его границы:
Любые отзывы о моем ответе? – Baz
Я рад, что вас заинтересовало ваше решение. Извините за задержку, я был на каникулах на этой неделе. Я проверил ваш код дома, и похоже, что проблема не возникает для упрощенного примера. Но мне нужно проверить это в реальном приложении, чтобы принять окончательное решение, если проблема действительно решена. Я сделаю это в понедельник, как только приеду на работу. –