Swing JFC Java

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
public class TableIt {
  class MyTableCellRenderer extends JLabel implements TableCellRenderer {
    final Border blueBorder = BorderFactory.createLineBorder(Color.BLUE);
    MyTableCellRenderer() {
      setOpaque(true);
    }
    public Component getTableCellRendererComponent(JTable table,
        Object value, boolean isSelected, boolean hasFocus, int row,
        int col) {
      setBackground((Color) value);
      if (isSelected) {
        setBorder(blueBorder);
      } else {
        setBorder(BorderFactory.createEmptyBorder());
      }
      return this;
    }
  }
  class MyTableModel extends DefaultTableModel {
    Object data[][] = { { "1", Color.RED }, { "2", Color.ORANGE },
        { "3", Color.YELLOW }, { "4", Color.GREEN },
        { "5", Color.BLUE }, { "6", Color.MAGENTA },
        { "7", Color.CYAN }, { "8", Color.PINK },
        { "9", Color.BLACK }, { "10", Color.GRAY } };
    MyTableModel() {
      setColumnIdentifiers(new String[] { "ID", "Name", "Color" });
      for (int i = 0, n = data.length; i < n; i++)
        addRow(new Object[] { new Integer(i + 1), data[i][0],
            data[i][1] });
    }
    public boolean isCellEditable(int row, int column) {
      return (column != 0);
    }
  }
  public TableIt() {
    JFrame f = new JFrame();
    TableModel tm = new MyTableModel();
    final JTable table = new JTable(tm);
    TableColumnModel tcm = table.getColumnModel();
    TableColumn column = tcm.getColumn(tcm.getColumnCount() - 1);
    TableCellRenderer renderer = new MyTableCellRenderer();
    column.setCellRenderer(renderer);
    JButton selectionType = new JButton("Next Type");
    selectionType.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        boolean rowSet = table.getRowSelectionAllowed();
        boolean colSet = table.getColumnSelectionAllowed();
        boolean cellSet = table.getCellSelectionEnabled();
        boolean setRow = !rowSet;
        boolean setCol = rowSet ^ colSet;
        boolean setCell = rowSet & colSet;
        table.setCellSelectionEnabled(setCell);
        table.setColumnSelectionAllowed(setCol);
        table.setRowSelectionAllowed(setRow);
        System.out.println("Row Selection Allowed? " + setRow);
        System.out.println("Column Selection Allowed? " + setCol);
        System.out.println("Cell Selection Enabled? " + setCell);
        table.repaint();
      }
    });
    JButton selectionMode = new JButton("Next Mode");
    selectionMode.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ListSelectionModel lsm = table.getSelectionModel();
        int mode = lsm.getSelectionMode();
        int nextMode;
        String nextModeString;
        if (mode == ListSelectionModel.SINGLE_SELECTION) {
          nextMode = ListSelectionModel.SINGLE_INTERVAL_SELECTION;
          nextModeString = "Single Interval Selection";
        } else if (mode == ListSelectionModel.SINGLE_INTERVAL_SELECTION) {
          nextMode = ListSelectionModel.MULTIPLE_INTERVAL_SELECTION;
          nextModeString = "Multiple Interval Selection";
        } else {
          nextMode = ListSelectionModel.SINGLE_SELECTION;
          nextModeString = "Single Selection";
        }
        lsm.setSelectionMode(nextMode);
        System.out.println("Selection Mode: " + nextModeString);
        table.repaint();
      }
    });
    JPanel jp = new JPanel();
    jp.add(selectionType);
    jp.add(selectionMode);
    JScrollPane jsp = new JScrollPane(table);
    Container c = f.getContentPane();
    c.add(jsp, BorderLayout.CENTER);
    c.add(jp, BorderLayout.SOUTH);
    f.setSize(300, 250);
    f.show();
  }
  public static void main(String args[]) {
    new TableIt();
  }
}