我在http://www.java2s.com/Code/Java/Swing-JFC/RenderinganimageinaJTablecollumn.htm中提到的JTable行中添加了一个Image。 但是现在我想将MouseListener添加到这个特定的Image中。 如何实现相同的
答案 0 :(得分:3)
没有直接支持,甚至没有独立的JLabel。所以有两个问题需要解决
对于第一个,您可以重新布局标签以获取包含图标的Rectangle(这是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