// Purpose.  JTable demo

import java.awt.*;            // Dimension
import javax.swing.*;         // JTable, JFrame
import javax.swing.table.*;   // TableModel, TableColumn, TableColumnModel
import java.awt.event.*;      // WindowAdapter
import javax.swing.event.*;   // TableModelListener, TableModelEvent

public class JTableDemo {
   public static JPanel createTable() {
      String[]   columnNames = { "First", "Second", "Third" };
      String[][] dataValues  = { { "123", "234", "345" },
                                 { "12",  "23",  "34"  },
                                 { "-12", "2.3", ".34" },
                                 { "111", "222", "333" } };
      JTable table = new JTable( dataValues, columnNames );

      TableModelListener tml = new TableModelListener() {
         public void tableChanged( TableModelEvent e ) {
            int row = e.getFirstRow();
            int col = e.getColumn();
            System.out.println( "row " + row + ", col " + col
               + " = " + ((TableModel)e.getSource()).getValueAt( row, col ) );
         }
      };
      table.getModel().addTableModelListener( tml );
      table.setCellSelectionEnabled( true );

      JScrollPane tScroll = new JScrollPane( table );
      tScroll.setPreferredSize( new Dimension(200,60) );
      JPanel tPanel = new JPanel();
      tPanel.add( tScroll );
      return tPanel;
   }

   public static void main( String[] args ) {
      JFrame frame = new JFrame( "JTable demo" );
      frame.addWindowListener( new WindowAdapter() {
         public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } );
      frame.getContentPane().add( createTable() );
      frame.pack();
      frame.setVisible( true );
   }
}

// row 0, col 0 = 123abc
// row 1, col 1 = replaced 23
// row 3, col 2 = added to 333
