Swing Components Java

// Example from http://www.crionics.com/products/opensource/faq/swing_ex/SwingExamples.html
/* (swing1.1beta3) */
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.UIManager;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.AbstractTableModel;
/**
 * @version 1.0 12/05/98
 */
public class FixedColumnExample extends JFrame {
  Object[][] data;
  Object[] column;
  JTable fixedTable, table;
  public FixedColumnExample() {
    super("Fixed Column Example");
    setSize(400, 150);
    data = new Object[][] { { "1", "11", "A", "", "", "", "", "" },
        { "2", "22", "", "B", "", "", "", "" },
        { "3", "33", "", "", "C", "", "", "" },
        { "4", "44", "", "", "", "D", "", "" },
        { "5", "55", "", "", "", "", "E", "" },
        { "6", "66", "", "", "", "", "", "F" } };
    column = new Object[] { "fixed 1", "fixed 2", "a", "b", "c", "d", "e",
        "f" };
    AbstractTableModel fixedModel = new AbstractTableModel() {
      public int getColumnCount() {
        return 2;
      }
      public int getRowCount() {
        return data.length;
      }
      public String getColumnName(int col) {
        return (String) column[col];
      }
      public Object getValueAt(int row, int col) {
        return data[row][col];
      }
    };
    AbstractTableModel model = new AbstractTableModel() {
      public int getColumnCount() {
        return column.length - 2;
      }
      public int getRowCount() {
        return data.length;
      }
      public String getColumnName(int col) {
        return (String) column[col + 2];
      }
      public Object getValueAt(int row, int col) {
        return data[row][col + 2];
      }
      public void setValueAt(Object obj, int row, int col) {
        data[row][col + 2] = obj;
      }
      public boolean CellEditable(int row, int col) {
        return true;
      }
    };
    fixedTable = new JTable(fixedModel) {
      public void valueChanged(ListSelectionEvent e) {
        super.valueChanged(e);
        checkSelection(true);
      }
    };
    table = new JTable(model) {
      public void valueChanged(ListSelectionEvent e) {
        super.valueChanged(e);
        checkSelection(false);
      }
    };
    fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    JScrollPane scroll = new JScrollPane(table);
    JViewport viewport = new JViewport();
    viewport.setView(fixedTable);
    viewport.setPreferredSize(fixedTable.getPreferredSize());
    scroll.setRowHeaderView(viewport);
    scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER, fixedTable
        .getTableHeader());
    getContentPane().add(scroll, BorderLayout.CENTER);
  }
  private void checkSelection(boolean isFixedTable) {
    int fixedSelectedIndex = fixedTable.getSelectedRow();
    int selectedIndex = table.getSelectedRow();
    if (fixedSelectedIndex != selectedIndex) {
      if (isFixedTable) {
        table.setRowSelectionInterval(fixedSelectedIndex,
            fixedSelectedIndex);
      } else {
        fixedTable
            .setRowSelectionInterval(selectedIndex, selectedIndex);
      }
    }
  }
  public static void main(String[] args) {
    FixedColumnExample frame = new FixedColumnExample();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    frame.setVisible(true);
  }
}