The Java Program: GenderEditor.java

  1 import java.awt.Component;
  2 import java.util.EventObject;
  3 import java.awt.event.*;
  4 import javax.swing.*;
  5 import javax.swing.event.*;
  6 import javax.swing.table.*;
  7 
  8 public class GenderEditor extends JComboBox implements TableCellEditor {
  9 
 10    protected EventListenerList listenerList = new EventListenerList();
 11    protected ChangeEvent changeEvent = new ChangeEvent(this);
 12 
 13    public GenderEditor() {
 14       addItem("Male");
 15       addItem("Female");
 16       addActionListener(new ActionListener() {
 17             public void actionPerformed(ActionEvent event) {
 18                fireEditingStopped();
 19             } 
 20          });
 21    }
 22 
 23    public void addCellEditorListener(CellEditorListener listener) {
 24       listenerList.add(CellEditorListener.class, listener);
 25    } 
 26 
 27    public void removeCellEditorListener(CellEditorListener listener) {
 28       listenerList.remove(CellEditorListener.class, listener);
 29    } 
 30 
 31    protected void fireEditingStopped() {
 32       CellEditorListener listener;
 33       Object[] listeners = listenerList.getListenerList();
 34       for (int i = 0; i < listeners.length; i++) {
 35          if (listeners[i] == CellEditorListener.class) {
 36             listener = (CellEditorListener)listeners[i + 1];
 37             listener.editingStopped(changeEvent);
 38          } 
 39       } 
 40    } 
 41 
 42    protected void fireEditingCanceled() {
 43       CellEditorListener listener;
 44       Object[] listeners = listenerList.getListenerList();
 45       for (int i = 0; i < listeners.length; i++) {
 46          if (listeners[i] == CellEditorListener.class) {
 47             listener = (CellEditorListener)listeners[i + 1];
 48             listener.editingCanceled(changeEvent);
 49          } 
 50       } 
 51    } 
 52 
 53    public void cancelCellEditing() {
 54       fireEditingCanceled();
 55    } 
 56 
 57    public boolean stopCellEditing() {
 58       fireEditingStopped();
 59       return true;
 60    } 
 61 
 62    public boolean isCellEditable(EventObject event) {
 63       return true;
 64    } 
 65 
 66    public boolean shouldSelectCell(EventObject event) {
 67       return true;
 68    } 
 69 
 70    public Object getCellEditorValue() {
 71       return new Boolean(getSelectedIndex() == 0 ? true : false);
 72    } 
 73 
 74    public Component getTableCellEditorComponent(JTable table, 
 75       Object value, boolean isSelected, int row, int column) {
 76       boolean isMale = ((Boolean)value).booleanValue();
 77       setSelectedIndex(isMale ? 0 : 1);
 78       return this;
 79    } 
 80 
 81 }