package com.swingsane.gui.component;
// http://www.devx.com/getHelpOn/10MinuteSolution/20425
// courtesy of Daniel F. Savarese
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableColumnModel;
public class JTableButtonMouseListener implements MouseListener {
private JTable jTable;
public JTableButtonMouseListener(JTable table) {
jTable = table;
}
private void forwardEventToButton(MouseEvent e) {
TableColumnModel columnModel = jTable.getColumnModel();
int column = columnModel.getColumnIndexAtX(e.getX());
int row = e.getY() / jTable.getRowHeight();
Object value;
JButton button;
MouseEvent buttonEvent;
if ((row >= jTable.getRowCount()) || (row < 0) || (column >= jTable.getColumnCount())
|| (column < 0)) {
return;
}
value = jTable.getValueAt(row, column);
if (!(value instanceof JButton)) {
return;
}
button = (JButton) value;
buttonEvent = SwingUtilities.convertMouseEvent(jTable, e, button);
button.dispatchEvent(buttonEvent);
jTable.repaint();
}
@Override
public final void mouseClicked(MouseEvent e) {
forwardEventToButton(e);
}
@Override
public final void mouseEntered(MouseEvent e) {
forwardEventToButton(e);
}
@Override
public final void mouseExited(MouseEvent e) {
forwardEventToButton(e);
}
@Override
public final void mousePressed(MouseEvent e) {
forwardEventToButton(e);
}
@Override
public final void mouseReleased(MouseEvent e) {
forwardEventToButton(e);
}
}