table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1 && SwingUtilities.isLeftMouseButton(e)) {
final JTableHeader th = (JTableHeader) e.getSource();
final TableColumnModel cm = th.getColumnModel();
final int column = th.columnAtPoint(e.getPoint());
if (column > -1 && column < cm.getColumnCount()) {
final Component comp = getRendererComponent(th, column);
if (comp instanceof JLabel && ((JLabel) comp).getIcon() != null) {
final JLabel label = (JLabel) comp;
final Rectangle bounds = th.getHeaderRect(column);
final Rectangle viewR = new Rectangle(bounds);
final Insets insets = label.getInsets();
viewR.x = insets.left;
viewR.y = insets.top;
viewR.width -= insets.left + insets.right;
viewR.height -= insets.top + insets.bottom;
final Rectangle iconR = new Rectangle();
final Rectangle textR = new Rectangle();
SwingUtilities.layoutCompoundLabel(label, label
.getFontMetrics(label.getFont()), label.getText(), label
.getIcon(), label.getVerticalAlignment(), label
.getHorizontalAlignment(), label
.getVerticalTextPosition(), label
.getHorizontalTextPosition(), viewR, iconR, textR, label
.getIconTextGap());
iconR.x += bounds.x;
iconR.y += bounds.y;
if (iconR.contains(e.getPoint())) {
System.out.println("THIS IS THE PLACE TO PERFORM YOUR ACTION!");
}
}
}
}
}
private Component getRendererComponent(
JTableHeader header,
int columnIndex) {
TableColumn aColumn = header.getColumnModel().getColumn(columnIndex);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
if (renderer == null) {
renderer = header.getDefaultRenderer();
}
return renderer.getTableCellRendererComponent(header.getTable(),
aColumn.getHeaderValue(), false, false, -1, columnIndex);
}
});