import java.awt.*;
import java.io.File;
import java.util.Date;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.table.AbstractTableModel;

public class FileTableModel2 extends AbstractTableModel {

  public FileTableModel2(File directory) {
    files=directory.listFiles();
  }

  public int getColumnCount() {
    return 3;
  }

  public int getRowCount() {
    return files.length;
  }
  
  public String getColumnName(int column) {
    return columnNames[column];
  }

  public Object getValueAt(int row, int column) {
    File file=files[row];
    switch(column) {
      case 0:
        return file.getName();
      case 1:
        return new Long(file.length());
      case 2:
        return new Date(file.lastModified());
    }
    throw new IllegalArgumentException("invalid column ("+row+','+column+')');
  }
  
  private final File[] files;
  private final static String[] columnNames={
    "Name","Length","Last modification"
  };
  
  public static void main(String[] args) {
    FileTableModel2 model=new FileTableModel2(new File("."));
    
    JTable table=new JTable(model);
    table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
      public Component getTableCellRendererComponent(
        JTable table,Object value,boolean isSelected,boolean hasFocus,
        int row,int column) {
          
        setBackground((row%2==0)?Color.LIGHT_GRAY:Color.WHITE);
          
        return super.getTableCellRendererComponent(
          table,value,isSelected,hasFocus,
          row,column);
      }
    });
    
    
    JScrollPane pane=new JScrollPane(table);
    
    JFrame frame=new JFrame("FileTableModel2");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(pane);
    frame.setSize(400,300);
    frame.show();
  }
}