import java.awt.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; import java.awt.event.*; import java.util.*; public class Test { public static void main (String[] args) { Win win = new Win("Test Window"); } } /*******************/ /* クラスWinの定義 */ /*******************/ class Win extends JFrame implements TableModelListener { String label[] = {"国", "地域", "1月", "2月", "3月", "合計", "平均", "目標"}; Object cel[][] = {{new ImageIcon("Japan.gif"), "東京", new Integer(5850), new Integer(4700), new Integer(6020), new Integer(0), new Integer(0), new Boolean(false)}, {new ImageIcon("England.gif"), "ロンドン", new Integer(4200), new Integer(3800), new Integer(3630), new Integer(0), new Integer(0), new Boolean(false)}, {new ImageIcon("Japan.gif"), "大阪", new Integer(2540), new Integer(2610), new Integer(2210), new Integer(0), new Integer(0), new Boolean(false)}, {new ImageIcon("France.gif"), "パリ", new Integer(2300), new Integer(1800), new Integer(1960), new Integer(0), new Integer(0), new Boolean(false)}, {new ImageIcon("China.gif"), "香港", new Integer(1500), new Integer(1250), new Integer(1430), new Integer(0), new Integer(0), new Boolean(false)}}; int n = 5, m = 8; TableModel model; /******************/ /* コンストラクタ */ /******************/ Win (String name) { // Frameクラスのコンストラクタ(Windowのタイトルを引き渡す) super(name); // 合計と平均の計算 int i1, i2, sum; for (i1 = 0; i1 < n; i1++) { sum = 0; for (i2 = 2; i2 < m-3; i2++) sum += Integer.parseInt(cel[i1][i2].toString()); cel[i1][m-3] = Integer.valueOf(Integer.toString(sum)); sum = (int)((double)sum / (m - 5) + 0.5); cel[i1][m-2] = Integer.valueOf(Integer.toString(sum)); if (sum > 3000) cel[i1][m-1] = new Boolean(true); } // テーブル Font f1 = new Font("MS 明朝", Font.PLAIN, 20); Font f2 = new Font("MS 明朝", Font.PLAIN, 25); JTable tb = new JTable(cel, label); tb.setFont(f1); tb.getTableHeader().setFont(f2); tb.setRowHeight(30); tb.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); model = tb.getModel(); model.addTableModelListener(this); Container cp = getContentPane(); JLabel lb = new JLabel("第1四半期の売り上げ"); lb.setFont(f2); cp.add(lb, BorderLayout.NORTH); cp.add(new JScrollPane(tb), BorderLayout.CENTER); // Windowの大きさ setSize(700, 180); // ウィンドウを表示 setVisible(true); // イベントアダプタ addWindowListener(new WinEnd()); } /******************************/ /* 上,左,下,右の余白の設定 */ /******************************/ public Insets getInsets() { return new Insets(35, 10, 10, 10); } /**************************/ /* 値が変化したときの処理 */ /**************************/ public void tableChanged(TableModelEvent e) { if (e.getSource() == model) { int r = e.getFirstRow(); int c = e.getColumn(); System.out.println(r + "行" + c + "列の値が修正されました"); } } /************/ /* 終了処理 */ /************/ class WinEnd extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } }