Swing Components Java

// Example from http://www.crionics.com/products/opensource/faq/swing_ex/SwingExamples.html
/*
 * (swing1.1beta3) swing#960
 */
import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
/**
 * @version 1.0 12/03/98
 */
class DecimalRenderer extends DefaultTableCellRenderer {
  DecimalFormat formatter;
  DecimalRenderer(String pattern) {
    this(new DecimalFormat(pattern));
  }
  DecimalRenderer(DecimalFormat formatter) {
    this.formatter = formatter;
    setHorizontalAlignment(JLabel.RIGHT);
  }
  public void setValue(Object value) {
    setText((value == null) ? "" : formatter.format(((Double) value)
        .doubleValue()));
  }
}
public class TotalRowExample extends JFrame {
  final private int TOTAL_ROW = 3;
  final private int TOTAL_COLUMN = 1;
  TotalRowExample() {
    super("Total Row Example");
    final DecimalFormat formatter = new DecimalFormat("###,##0.00");
    DefaultTableModel dm = new DefaultTableModel() {
      public void setValueAt(Object value, int row, int col) {
        Vector rowVector = (Vector) dataVector.elementAt(row);
        if (col == TOTAL_COLUMN) {
          Double d = null;
          if (value instanceof Double) {
            d = (Double) value;
          } else {
            try {
              d = new Double(((Number) formatter
                  .parse((String) value)).doubleValue());
            } catch (ParseException ex) {
              d = new Double(0.0);
            }
          }
          rowVector.setElementAt(d, col);
        } else {
          rowVector.setElementAt(value, col);
        }
      }
      public boolean isCellEditable(int row, int col) {
        if (row == TOTAL_ROW)
          return false;
        return true;
      }
      public Class getColumnClass(int col) {
        if (col == TOTAL_COLUMN)
          return Number.class;
        return String.class;
      }
    };
    dm.setDataVector(new Object[][] { { "coffee", new Double(0.0) },
        { "tea", new Double(0.0) }, { "cocoa", new Double(0.0) },
        { "total", new Double(0.0) } },
        new Object[] { "Item", "Price" });
    JTable table = new JTable(dm) {
      public void editingStopped(ChangeEvent e) {
        super.editingStopped(e);
        reCalcurate(getModel());
        repaint();
      }
    };
    table.getColumn("Price")
        .setCellRenderer(new DecimalRenderer(formatter));
    JScrollPane scroll = new JScrollPane(table);
    Container content = getContentPane();
    content.add(scroll);
    setSize(300, 120);
    setVisible(true);
  }
  private void reCalcurate(TableModel ml) {
    if (ml == null)
      return;
    double total = 0.0;
    for (int i = 0; i < TOTAL_ROW; i++) {
      total += ((Double) ml.getValueAt(i, TOTAL_COLUMN)).doubleValue();
    }
    ml.setValueAt(new Double(total), TOTAL_ROW, TOTAL_COLUMN);
  }
  public static void main(String[] args) {
    TotalRowExample frame = new TotalRowExample();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }
}