package org.korsakow.ide.ui.components.code;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JTable;
import org.korsakow.ide.util.UIUtil;
/**
* Causes mouse press events to be directly forwarded to the cell editor. For example default JTable behavior is to
* click the cell whereupon the editor is created. This class causes that initial click to happen on the editor.
*
* For example, if the cell content and editor is a JButton, you can then just click the button as expected.
*
* @author d
*
*/
public final class ComponentCellEditorSimpleClickAdapter extends MouseAdapter
{
private int componentEditorColumn;
public ComponentCellEditorSimpleClickAdapter(int componentEditorColumn)
{
this.componentEditorColumn = componentEditorColumn;
}
public void mousePressed(final MouseEvent event)
{
final JTable table = (JTable)event.getComponent();
Point p = event.getPoint();
final int column = table.columnAtPoint(p);
final int row = table.rowAtPoint(p);
// only apply to selected columns and valid rows
if (column != componentEditorColumn || row == -1)
return;
if (!table.editCellAt(row, column))
return;
// run later in case the editor needs a chance to be setup
UIUtil.runUITaskLater(new Runnable() {
public void run() {
// dispatch the event to the editor
if (table.getEditorComponent() != null) {
MouseEvent copy = new MouseEvent(table.getEditorComponent(), event.getID(), event.getWhen(), event.getModifiers(), event.getX(), event.getY(), event.getClickCount(), UIUtil.isPopupTrigger(event));
table.getEditorComponent().dispatchEvent(copy);
}
}
});
}
}