import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
import java.util.*;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.table.AbstractTableModel;

public class MyTableModel4 extends AbstractTableModel {

  public MyTableModel4(String[] array) {
    ArrayList list=new ArrayList();
    list.addAll(Arrays.asList(array));
    this.list=list;
  }

  public int getColumnCount() {
    return 3;
  }

  public int getRowCount() {
    return list.size();
  }
  
  public void add(String text) {
    int index=list.size();
    list.add(text);
    fireTableRowsInserted(index, index);
  }
  
  public String getColumnName(int column) {
    return columnNames[column];
  }

  public Object getValueAt(int row, int column) {
    switch(column) {
      case 0:
        return list.get(row);
      case 1:
        return new Integer(((String)list.get(row)).length());
      case 2:
        return new Integer(((String)list.get(row)).indexOf('a'));
    }
    throw new IllegalArgumentException("invalid column ("+row+','+column+')');
  }
  
  private ArrayList list;
  private final static String[] columnNames={
    "Text","Length","Index of 'a'"
  };
  
  static final Color LIGHT_GREEN=new Color(200,200,0);
  
  public static void main(String[] args) {
    final MyTableModel4 model=new MyTableModel4(args);
    
    
    final TableCellRenderer renderer=new DefaultTableCellRenderer() {
      public Component getTableCellRendererComponent(JTable table,
        Object value,boolean isSelected,boolean hasFocus,int row,int column) {
        
        JLabel label=(JLabel)super.getTableCellRendererComponent(table,
          value,isSelected,hasFocus,row,column);
          
        if (!isSelected)
          label.setBackground((row%2==0)?LIGHT_GREEN:Color.WHITE);
          
        return label;
      }

    };
    
    JTable table=new JTable(model) {
      public TableCellRenderer getCellRenderer(int row, int column) {
        return renderer;
      }
    };
    JScrollPane pane=new JScrollPane(table);
    
    final JFrame frame=new JFrame();
    
    JButton button=new JButton("add text ...");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        String text=JOptionPane.showInputDialog(frame,"Enter a new text");
        if (text!=null)
          model.add(text);
      }
    });
    
    JPanel panel=new JPanel(new BorderLayout());
    panel.add(button,BorderLayout.NORTH);
    panel.add(pane);
    
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(panel);
    frame.setSize(400,300);
    frame.show();
  }
}