Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(swing jtable 新規入力行の判定)
閲覧数:1034
掲示板(swing jtable 新規入力行の判定)
名前
題名 swing jtable 新規入力行の判定
質問内容

質問を評価する
(0ポイント)
jtableにアクセスのように新規入力用行を追加するため、以下のようにモデルに追加

model.addRow(new Object[] { RecCnt + 1, 1 }); //新規入力行を追加

次に、新規入力用行に実際に値が入力されたらSQLのINSERT処理を行い
既存行ならば、SQLのUPDATE処理を行うということがしたいのですが
この、”新規入力行か既存行か”というのを判定する方法を知りたい。
DBにSELECT COUNT(*) FROM TABLEを走らせて、レコード数を取得
model.getRowCount()でモデルのレコード数を取得し、比較するという
方法をやってみましたが、INSERT処理がトリガできないのです。
どなたか、どういう方法をとればよいかご指導ください。

table.getModel().addTableModelListener(
new TableModelListener() {
    public void tableChanged(TableModelEvent te) {
    int row = te.getLastRow();
    int col = te.getColumn();
    int trc = table.getRowCount();
    int mrc = model.getRowCount();
        if (te.getType() == TableModelEvent.INSERT) {
        // model.addRowした後だと呼ばれない?
            insertTable(row, col);
        }
        
        if (te.getType() == TableModelEvent.UPDATE) {
            try {
                Class.forName(JDBC_DRIVER);
                Connection conn = DriverManager.getConnection(STR_CONN);
                Statement stmt = conn.createStatement();
                String CntSql = "select count(*) from test_records";
                ResultSet rst = stmt.executeQuery(CntSql);
                rst.next();
                // 行数を取得する。
                int RecCnt = rst.getInt(1);
                conn.close();
                if (RecCnt + 1 == mrc) { //ここをどうすればよいか?
                    insertTable(row, col);
                }
                updateTable(row, col);
                JTable table = null;
                table = selectTable();
        
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
});
質問日時 2013-04-19 00:00:05
名前
回答内容

回答を評価する
(0ポイント)
お騒がせしてすいません。
INSERT処理がトリガできなかったのは
レコード数を比較するという処理自体が機能していなかったからでした。
良い解決策ではないかもしれませんが、単純にモデルの行数とレコード数の
差異が1レコードの場合にINSERT処理を動作させるようにしました。

                                        
table.getModel().addTableModelListener(new TableModelListener() {
    public void tableChanged(TableModelEvent te) {
        int row = te.getLastRow();
        int col = te.getColumn();
        int trc = table.getRowCount();
        int mrc = model.getRowCount();

        System.out.println("setListener_row = " + row);
        System.out.println("setListener_col = " + col);
        System.out.println("setListener_trc = " + trc);
        System.out.println("setListener_mrc = " + mrc);

        if (te.getType() == TableModelEvent.INSERT) {
            //追加の場合の処理
            insertTable(row, col);
        }

        if (te.getType() == TableModelEvent.UPDATE) {
            //更新の場合の処理
            if (row + 1 == mrc) {
                insertTable(row, col);
            }
            updateTable(row, col);

            JTable table = null;
            table = selectTable();
        }
    }
});

ありがとうございました。
回答日時 2013-04-27 12:08:14

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道