EarthWeb
Developer.com
Site
windows 2000
visual c++
java
visual basic
javascripts
recommend it
 
Book
thinking in java
 
Interact
forum
guest book
jobs
jokes
what's new

share code
 
Resource
add resource
modify resource
new resource
 

[Internet Jobs]
-----
Java by E-mail:

Get the weekly e-mail highlights on Java!
-----

-

Dynamically compute and display the column total in a cell


Author: Nobuo Tamemasa

Show you how to recompute the value in a cell to equal the sum of the cells above it.

sum


// File: TotalRowExample.java
/*
 * (swing1.1beta3) swing#960
 */
//package jp.gr.java_conf.tame.swing.examples;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;

/**
 * @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);
      }
    });
  }
}



Posted On: 3-Jan-1999

internet.commerce



Acceptable Use Policy

internet.comMediabistrojusttechjobs.comGraphics.com

WebMediaBrands Corporate Info


Advertise | Newsletters | Feedback | Submit News

Legal Notices | Licensing | Permissions | Privacy Policy