将监听器添加到JTable Row中的图像

时间:2011-11-14 05:40:07

标签: swing jtable

我在http://www.java2s.com/Code/Java/Swing-JFC/RenderinganimageinaJTablecollumn.htm中提到的JTable行中添加了一个Image。 但是现在我想将MouseListener添加到这个特定的Image中。 如何实现相同的

1 个答案:

答案 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