напрямую не поддерживается, даже в автономном JLabel.Таким образом, есть две проблемы, которые нужно решить
- получить область значка на метке
- получить область компонента рендеринга в таблице
Во-первых, вы можете изменить расположение метки, чтобы получить прямоугольник, который содержит значок (это то, что BasicLabelUI делает внутри):
protected String layoutCL(
JLabel label,
FontMetrics fontMetrics,
String text,
Icon icon,
Rectangle viewR,
Rectangle iconR,
Rectangle textR)
{
return SwingUtilities.layoutCompoundLabel(
(JComponent) label,
fontMetrics,
text,
icon,
label.getVerticalAlignment(),
label.getHorizontalAlignment(),
label.getVerticalTextPosition(),
label.getHorizontalTextPosition(),
viewR,
iconR,
textR,
label.getIconTextGap());
}
для второго, спроситетаблицу для прямоугольника ячейки в позиции мыши и проверьте, будет ли нажат значок, предполагая, что метка будет добавлена (и заполнит) ячейку
int row = table.rowAtPoint(e.getPoint());
int column = table.columnAtPoint(e.getPoint());
Rectangle cellRect = table.getCellRect(row, column, false);
JLabel label = (JLabel) table.prepareRenderer(table.getRenderer(row, column), row, column);
Rectangle viewR = new Rectangle(0, 0, cellRect.width, cellRect.height);
Rectangle iconR = new Rectangle();
Rectangle textR = new Rectangle();
// call method above and do some math to translate the mouseEvent relative to the cell