Table Controls

Table Models

 

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

The Model

class MyTableModel extends AbstractTableModel {
   private static final long serialVersionUID = 1L;

    private String[] columnNames = {
         "Input 1",
           "Input 2",
           "Sum",
           "Product",
           "Difference",
           "Quotient"};

    private Double[][] data = {
         {10.0, 2.0, 12.0, 20.0, 8.0, 5.0},
         {100.0, 20.0, 120.0, 2000.0, 80.0, 5.0},
         {1.0, 1.0, 2.0, 1.0, 0.0, 1.0},
         {25.0, 5.0, 30.0, 5.0, 20.0, 5.0}
   };

   public String[] getColumnNames() { return columnNames; }

    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return data.length;
    }

    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }

    public boolean isCellEditable(int row, int col) {
        return (col < 2);
    }

    public void setValueAt(Object value, int row, int col) {
        data[row][col] = (Double)value;
      fireTableCellUpdated(row, col);
    }
}

The Table Component

public class TableGUI extends JPanel implements TableModelListener {

   private static final long serialVersionUID = 1L;
   private JTable table;

   public TableGUI() {
      MyTableModel model = new MyTableModel();
      model.addTableModelListener(this);
      table = new JTable(model);
      table.setPreferredScrollableViewportSize(
         new Dimension(500, 70));
      setLayout(new BorderLayout());
      add(table.getTableHeader(), BorderLayout.PAGE_START);
      add(table, BorderLayout.CENTER);
   }

   public void tableChanged(TableModelEvent e) {
        int row = e.getFirstRow();
        int column = e.getColumn();
        if (column < 2) {
        MyTableModel model = (MyTableModel)e.getSource();
        double arg1 = (Double)model.getValueAt(row, column);
        double arg2 =
            (Double)model.getValueAt(row, (column + 1) % 2);
        model.setValueAt(new Double(arg1 + arg2), row, 2);
        model.setValueAt(new Double(arg1 * arg2), row, 3);
        model.setValueAt(new Double(arg1 - arg2), row, 4);
        model.setValueAt(new Double(arg1 / arg2), row, 5);
      }
    }

   public static void main(String[] args) {
      AppFrame app = new AppFrame();
      app.setTitle("Table GUI");
      TableGUI gui = new TableGUI();
      JScrollPane scrollPane = new JScrollPane(gui.table);
      app.setContentPane(scrollPane);
      app.display();
   }
}