Mega Code Archive

 
Categories / Java / Swing Components
 

Total(Calculate) Row Example

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