001    // Copyright 2006 by Basil Vandegriend.  All rights reserved.
002    
003    package com.basilv.examples.enums;
004    
005    import java.awt.Dimension;
006    import java.util.*;
007    
008    import javax.swing.*;
009    import javax.swing.table.*;
010    
011    
012    public class PersonTableModelUsage
013    {
014    
015      public static void main(String[] args) {
016        
017        List<Person> list = new ArrayList<Person>();
018        list.add(new Person("Dave", "Davidson", 
019          60, createDate(1946, 03, 13)));
020        list.add(new Person("Bob", "Smith", 
021          40, createDate(1966, 04, 30)));
022        list.add(new Person("John", "Jones", 
023          20, createDate(1986, 01, 15)));
024        list.add(new Person("Jimmy", "Xi", 
025          30, createDate(1976, 05, 22)));
026        
027        PersonTableModel tableModel = new PersonTableModel();
028        tableModel.setPersonList(list);
029        
030        JTable table = new JTable(tableModel);
031    
032        // Adjust column widths
033        int widthOfTypicalCharacter = 
034          table.getFontMetrics(table.getFont()).charWidth('x');
035        
036        TableColumnModel columnModel = table.getColumnModel();
037        for (int i = 0; i < columnModel.getColumnCount(); i++) {
038          TableColumn tableColumn = columnModel.getColumn(i);
039          PersonTableModel.Column column = PersonTableModel.Column
040            .values()[i];
041          tableColumn.setPreferredWidth(widthOfTypicalCharacter
042            * column.getWidthInCharacters());
043        }
044    
045        JScrollPane scrollPane = new JScrollPane(table);
046        scrollPane.setPreferredSize(new Dimension(300, 100));
047        
048        JOptionPane.showMessageDialog(null, scrollPane, 
049          "Person Table", JOptionPane.INFORMATION_MESSAGE);
050        
051        System.exit(0);
052      }
053      
054      private static Date createDate(
055        int year, int month, int dayOfMonth) {
056        Calendar calendar = Calendar.getInstance();
057        calendar.set(year, month - 1, dayOfMonth, 0, 0);
058        return calendar.getTime();
059      }
060      
061    }