2017-10-08 13 views
0

jTable(ネットビーンズを使用)を使用するデータベースアプリケーションがあります。テーブルモデルリスナをjTableに追加しましたので、jTableを編集するとデータベース(MySQL)も編集されます。しかし、ユーザーがjTableをクリックしてボタンをクリックすると動作しなくなります。TableModelListenerは時々しか動作しません

編集:アイブ氏は、私が実行したときに、それが唯一の動作を停止することを実現し、 "jTable1.setModel(DbUtils.resultSetToTableModel(mySql.UpdateTable()));"テーブルを更新します。私はこの行を実行するボタンを押すと、他のボタンや他の時間を停止し、それは動作します。

テーブルを更新する:

public ResultSet UpdateTable(){ 

     Connection con = connect(); 
    try{ 
     Statement s = con.createStatement(); 
     ResultSet resultset; 
     resultset = s.executeQuery("select * from customera"); 
     return resultset; 
     } 
    catch(SQLException e){ 
     System.out.println(e.getMessage()); 
    } 
    return null; 
} 

}

tablemodellistenerクラス:

import javax.swing.event.TableModelEvent; 
import javax.swing.event.TableModelListener; 

public class TableActionListener implements TableModelListener{ 

Rob1 r; 

public TableActionListener(){ 
    r = new Rob1(); 
    } 

public void tableChanged(TableModelEvent e){ 
    System.out.println("action"); 
    int id = r.getID(); 
    int column = e.getColumn(); 
    int row = e.getFirstRow(); 



    } 

} 

コンストラクタにそうようなテーブルモデルリスナーを追加:

jTable1.getModel().addTableModelListener(new TableActionListener()); 

取得します現在のIDを返すために

int id; 

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {          
    // TODO add your handling code here: 
    System.out.println(evt.getClickCount()); 

     int row = jTable1.getSelectedRow(); 
     int col = jTable1.getSelectedColumn(); 
     id = (int)jTable1.getModel().getValueAt(row, 0); 

} 

public int getID(){ 
    return id; 
} 
+0

あなたは達成したいことと失敗する方法についてより具体的に説明できますか? –

+1

setModelの後、リスナーは古いモデルをリッスンします。リスナーを新しいモデルに追加する必要があります。それが問題だろうか? –

+0

「モデルを設定する」とはどういう意味ですか? –

答えて

1

、ユーザがJTableのをオフにクリックし、それが動作を停止ボタンをクリックしたときにそれはしかし、作品の行は、私はこのコードを追加しましたクリック。

デフォルトでは、テーブルのセルエディタは、テーブル内の別のセルに移動すると編集が停止されます。

他のコンポーネントをクリックすると、編集を中止するようにテーブルに指示する必要があります。データが保存され、TableModelListenerが呼び出されます。

これには2つの方法についてTable Stop Editingチェックアウト:)

1をテーブルにプロパティを追加します。

JTable table = new JTable(...); 
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 

2)あなたのボタンのリスナーにコードを追加します。

if (table.isEditing()) 
    table.getCellEditor().stopCellEditing(); 

Table Cell Listenerをチェックして、TableModelListenerの代わりに使用する方が適切かもしれません。

+0

私はこれを試しましたが、同じ問題を抱えています。元の投稿を編集して、私が見つけたものを表示しました。 –

関連する問題