2011-09-30 16 views
5

JTableセル値変更のイベントに反応するために使用できるリスナーはどれですか?私はTableModelListenerを使用しようとしましたが、何か間違っているか、このリスナーはセルの内容を変更することに反応しません。JTableセル値変更リスナー

私は、セルの内容を変更するか、またはフォーカスを失うセルにする必要があります。これを行う最善の方法は何ですか?ありがとう。

+3

モデルの実装(またはその使用法)に何か問題があります - 変更時に_always_に通知する必要があります。 TableModelListenerは行く方法です – kleopatra

+0

実際、これが当てはまりました。テーブル更新メソッドの1つがモデルを置き換え、リスナが古いモデルにアタッチされました。見ていただきありがとうございます。ありがとうございました。 – celicni

答えて

2

値の変更に反応する簡単な方法は、テーブルモデルをカスタマイズしてsetValueAt()に反応させることです。

フォーカスが失われたときに "棒が"に編集されていることを確認したい場合は、これをテーブルで呼び出してください。

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 
5
class extends JTable { 

....ここで(コンストラクタ内)

addPropertyChangeListener(new PropertyChangeListener() { 

    @Override 
    public void propertyChange(PropertyChangeEvent evt) { 
     if ("tableCellEditor".equals(evt.getPropertyName())) { 
      if (isEditing()) 
       processEditingStarted(); 
      else 
       processEditingStopped(); 
     } 
    } 
}); 

...(端コンストラクタ)

protected void processEditingStopped() { 
    System.out.println("save " + editingRow + ":" + editingColumn); 
} 

protected void processEditingStarted() { 
    System.out.println("edit " + editingRow + ":" + editingColumn); 
    if (editRow > -1 && editColumn > -1) 
     oldValue = (String) model.getValueAt(editRow, editColumn); 
} 

}

詳細:http://tips4java.wordpress.com/2009/06/07/table-cell-listener/

+0

ehh ...いいえ(Robの提案から間違ってコピーされました;-)一般的なケースでは、とにかく最善のことではありません。 – kleopatra

+0

コピーされていません – ungalcrys

+0

重点は_incorrect_(コピーされていません)です - 詳細を慎重に比較してください:-) – kleopatra

関連する問題