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 }