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();
�� }
}