###前提・実現したいこと
初めて利用させていただきます。
よろしくお願いします。
利用方法がよくわかっていないので、回答していただいた方へ、
お礼ができないかもしれません。
申し訳ありません。ご容赦ください。
さて、質問です。
java jtableで表計算プログラムを作ろうとしましたが、
列の合計をする方法がわかりません。
下記のソースでは、行の合計は出るのですが、
列の合計はどうすればいいのでしょうか。
リスナーを列用にもう一つ用意すればよいのでしょうか。
###該当のソースコード
/** JTableのテスト{1列目+2列目の計算結果を3列目に表示} */
import javax.swing.;
import javax.swing.table.; //テーブルモデルを定義するために必要
import javax.swing.event.*; //TableModelEventを利用するために必要
public class SwingJTableTest4 implements TableModelListener {
private JTable table; private JScrollPane sp; private DefaultTableModel model; /** コンストラクタ */ public SwingJTableTest4() { // headerで定義したヘッダを元に5行のテーブルモデルを生成 String[] header = { "Japanese", "Math", "Sum" }; model = new DefaultTableModel(header, 5); table = new JTable(model); sp = new JScrollPane(table); model.addTableModelListener(this); // modelのイベント通知登録 } /** テーブルに編集が加えられたときの処理 */ public void tableChanged(TableModelEvent evt) { int a, b; int row = evt.getFirstRow(); // 選択されている(先頭)行を取得 if ( evt.getColumn() == 2) { // 3列目が編集されたら何もしない return; } // 1列目と2列目の内容を整数へ変換(不正な値は0とする) try { a = Integer.parseInt((String)model.getValueAt(row, 0)); } catch(NumberFormatException nfex) { model.setValueAt("0", row, 0); a = 0; } try { b = Integer.parseInt((String)model.getValueAt(row, 1)); } catch(NumberFormatException nfex) { model.setValueAt("0", row, 1); b = 0; } // 1~2列目の計算結果を3列目に設定 model.setValueAt(new Integer(a+b), row, 2); } /** main() */ public static void main(String[] args) { SwingJTableTest4 sample = new SwingJTableTest4(); JFrame frame = new JFrame("JTableTest4"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(sample.sp, "Center"); frame.pack(); frame.setVisible(true); }
}
###試したこと
public void tableChanged(TableModelEvent evt)の中に、
int a1,a2
a1 = Integer.parseInt((String)model.getValueAt(1, 0));
model.setValueAt(new Integer(a+a1), 3, 0);
などとやってみたらunknownメッセージが出て、
メッセージをどう読めばよいのかわからず、
質問させていただいた次第です。
###補足情報(言語/FW/ツール等のバージョンなど)