// Purpose.  JTable, TableModel, TableColumn, TableCellRenderer demo

import java.awt.*;          // Color.yellow, Color.red
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*; 

public class JTableDataModelDemo {

   static class ArrayBasedDataModel extends AbstractTableModel {
      private Object[][] values;

      public ArrayBasedDataModel( Object[][] vals ) { values = vals; }
      public int     getRowCount()    { return values.length; }
      public int     getColumnCount() { return values[0].length; }
      public Class   getColumnClass( int col ) {
         return getValueAt(0,col).getClass(); }
      public boolean isCellEditable( int row, int col ) { return(col == 2); }
      public Object  getValueAt( int row, int col ) { return values[row][col]; }
      public void    setValueAt( Object aValue, int row, int column ) {
         values[row][column] = aValue;
   }  }

   public static JTable createTable() {
      Object[][] values = { { "Alpha",   new Integer(42), Boolean.TRUE  },
                            { "Bravo",   new Integer(11), Boolean.TRUE  },
                            { "Charlie", new Integer(13), Boolean.FALSE },
                            { "Delta",   new Integer(17), Boolean.TRUE  },
                            { "Echo",    new Integer(19), Boolean.FALSE },
                            { "Foxtrot", new Integer(23), Boolean.TRUE  } };
      JTable table = new JTable( new ArrayBasedDataModel( values ) );

      TableColumn col1 = table.getColumnModel().getColumn(0);
      TableColumn col2 = table.getColumnModel().getColumn(1);
      TableColumn col3 = table.getColumnModel().getColumn(2);
      col1.setHeaderValue("Letter");
      col2.setHeaderValue("Number");
      col3.setHeaderValue("Selected");

      DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
      renderer.setBackground( Color.yellow );
      renderer.setForeground( Color.red );
      renderer.setToolTipText( "Phonetic alphabet" );
      col1.setCellRenderer( renderer );

      return table;
   }

   public static void main( String[] args ) {
      JFrame frame = new JFrame( "JTable data model demo" );
      frame.addWindowListener( new WindowAdapter() {
         public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } );

      JTable table = createTable();
      frame.getContentPane().add( table, "Center" );
      frame.getContentPane().add( table.getTableHeader(), "North" );

      frame.pack();
      frame.setVisible( true );
}  }
