Добавление слушателя к изображению в JTable Row - PullRequest
0 голосов
/ 14 ноября 2011

Я добавил изображение в строку JTable, упомянутую в http://www.java2s.com/Code/Java/Swing-JFC/RenderinganimageinaJTablecollumn.htm. Но теперь я хочу добавить MouseListener к этому конкретному изображению.Как добиться того же

1 Ответ

3 голосов
/ 14 ноября 2011

напрямую не поддерживается, даже в автономном 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...