3

AbstractTableModelを拡張するカスタムTableModelがあります。

public class IndicatorPropertyTableModel extends AbstractTableModel

私が書いたsetValueAt関数は、編集可能なセルに新しい値を入力してから別のセルに移動した場合に適切に起動します。私が抱えている問題は、最後の編集可能なセルについて、ユーザーがすぐにJButtonをクリックして続行することです。これはsetValueAt関数をトリガーしないため、データを保存しません。ユーザーがセルを編集した直後にボタンを押したときに、この値が常に保存されるようにするための良い方法はありますか?必要に応じて参照できるように、以下のsetValueAt関数。

public void setValueAt(Object value, int row, int col) {
    if (value == null)
        return;
    if (col == 0) {
        //this.indicatorArguments[row].setIsSelected(value);
    } else if (col == 2) {
        this.indicatorArguments[row].setValue(value);
    }
    this.fireTableCellUpdated(row, col);
}

あなたが提供できるどんな助けにも感謝します。

4

2 に答える 2

4

あなたのボタンはテーブルの外にあると思います。

イベントリスナーまたはボタンのアクションでは、テーブルへの参照が必要になります。このテーブルでは、isEditingがtrueを返すかどうかを尋ねることができます。次に、現在のエディターを取得し、最後の入力値を検証した後、stopCellEditingを呼び出して値をコミットするか、cancelCellEditingを呼び出し元に戻します。

要するに:

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

まだ入力されていない値を常にコミットします。

于 2011-04-05T13:29:51.297 に答える
1

テーブルが編集中であるかどうかを確認するには、GUIのすべてのボタンにコードを追加する必要があります。

これを回避する単純な1行のソリューションを使用できる場合があります。TableStopEditingをチェックしてください。

于 2011-04-05T15:37:54.400 に答える