Swing Java Tutorial

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class EditableTable {
  public static void main(String[] a) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    String[] columnTitles = { "First Name", "Last Name", "Weight (lb)", "Blood Group", "Age>20yrs" };
    Object[][] dataEntries = { { "Saravan", "Pantham", new Integer(50), "B", new Boolean(false) },
        { "Eric", "", new Integer(180), "O", new Boolean(true) },
        { "John", "", new Integer(120), "AB", new Boolean(false) },
        { "Mathew", "", new Integer(140), "A", new Boolean(true) }, };
    TableModel model = new EditableTableModel(columnTitles, dataEntries);
    JTable table = new JTable(model);
    table.createDefaultColumnsFromModel();
    String[] bloodGroups = { "A", "B", "AB", "O" };
    JComboBox comboBox = new JComboBox(bloodGroups);
    table.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(comboBox));
    frame.add(new JScrollPane(table));
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}
class EditableTableModel extends AbstractTableModel {
  String[] columnTitles;
  Object[][] dataEntries;
  int rowCount;
  public EditableTableModel(String[] columnTitles, Object[][] dataEntries) {
    this.columnTitles = columnTitles;
    this.dataEntries = dataEntries;
  }
  public int getRowCount() {
    return dataEntries.length;
  }
  public int getColumnCount() {
    return columnTitles.length;
  }
  public Object getValueAt(int row, int column) {
    return dataEntries[row][column];
  }
  public String getColumnName(int column) {
    return columnTitles[column];
  }
  public Class getColumnClass(int column) {
    return getValueAt(0, column).getClass();
  }
  public boolean isCellEditable(int row, int column) {
    return true;
  }
  public void setValueAt(Object value, int row, int column) {
    dataEntries[row][column] = value;
  }
}