/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.forms.components.model.grid.columns;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;
/**
*
* @author mg
*/
public abstract class RowHeaderCellEditor extends JPanel implements TableCellEditor, ActionListener {
protected JTable editingTable;
protected int editingRow = -1;
protected Set<CellEditorListener> listenenrs = new HashSet<>();
public RowHeaderCellEditor() {
super(new BorderLayout());
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){
editingTable = table;
editingRow = row;
return this;
}
@Override
public Object getCellEditorValue() {
return null;
}
@Override
public boolean isCellEditable(EventObject anEvent) {
return anEvent instanceof MouseEvent;
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
invokeRowHeaderAction();
return false;
}
@Override
public boolean stopCellEditing() {
ChangeEvent event = new ChangeEvent(this);
for (CellEditorListener l : listenenrs.toArray(new CellEditorListener[0])) {
l.editingStopped(event);
}
return true;
}
@Override
public void cancelCellEditing() {
ChangeEvent event = new ChangeEvent(this);
for (CellEditorListener l : listenenrs.toArray(new CellEditorListener[0])) {
l.editingCanceled(event);
}
}
@Override
public void addCellEditorListener(CellEditorListener l) {
listenenrs.add(l);
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
listenenrs.remove(l);
}
@Override
public void actionPerformed(ActionEvent e) {
invokeRowHeaderAction();
}
protected abstract void invokeRowHeaderAction();
}