2016-10-06 6 views
0

同じ情報を含む2つの別々のデータ配列を作成してこの問題に取り組んでみました。これらのデータ配列の1つ(tableData)はJTableのコンストラクタで使用され、もう1つ(oldTableData)はアプリケーションが最初に実行されたときにセルの値を元の値に戻すために使用されます。 2番目のデータ配列が必要です。最初のデータ配列はテーブルのセルの値を変更するたびに自動的に更新されるため、JTableのこの機能を無効にすることは可能ですか?JTableで編集したセルの内容を以前のものに戻す

キャンセルボタンがセルの編集中に加えられたすべての変更を取り消す必要があるため、テーブル内のセルを編集中にキャンセルボタンをクリックしたときにこの機能を使用する必要があります。ここではこれまでにキャンセルボタンのための私の実装です:

if(e.getSource().equals(cancelMenuButton)) { 
     //prints set of edited cells 
     System.out.println("edited cells: "+editedCells); 

     ///once cancel button is clicked, disable both submit and cancel, as we are out of edit mode 
     cancelMenuButton.setEnabled(false); 
     submitMenuButton.setEnabled(false); 

     //reset values in table 
     Iterator<Point> iterator = editedCells.iterator(); 
     while(iterator.hasNext()) { 
      Point point = iterator.next(); 
      System.out.println("Value at "+point.x+", "+point.y+": "+table.getValueAt(point.y, point.x)); 
      System.out.println("Old value at "+point.x+", "+point.y+": "+oldTableData[point.y][point.x]); 

      table.setValueAt(oldTableData[point.y][point.x], point.y, point.x); 
     } 

     editedCells.clear(); 

     //cancel cell editing 
     CellEditor cellEditor = table.getCellEditor(); 
     if(cellEditor != null) { 
      if(cellEditor.getCellEditorValue() != null) { 
       cellEditor.stopCellEditing(); 
      } else { 
       cellEditor.cancelCellEditing(); 
      } 
     } 
    } 

私の質問はこれを行うための簡単な方法、二つの同一のデータ配列を作成する必要がないものがあるかどうかではありません。ありがとうございました。

+0

より良いヘルプのためにあなたのコードは何ですか?SSCCE/MCVE、ショートカット、実行可能、コンパイル可能、JTable/XxxTableModelのハードコードされた値をローカル変数 – mKorbel

答えて

1

これはおそらく、これを行うための最も簡単な方法です

、これを行うための簡単な方法です。このデータを使用して新しいTableModelを作成し、テーブルのモデルをリセットするだけで済みます。

ただし、問題は2つのデータのコピーが必要なことです。

2つの同一のデータアレイを作成する必要はありません。

セルのデータがいつ変更されるかを追跡する必要があります。

したがって、HashMapのキーは行/列で、データは元の値です。したがって、「キャンセル」では、HashMapを繰り返して、マップ内の各キーのデータを復元します。

Table Cell Listenerを使用すると、TableModelの変更をリスンすることができます。次に、イベントが生成されるたびに、HashMapの行/列に値があるかどうかを確認します。そうでない場合は、元の値を保存します。

+0

私は最初のデータ配列を無効にする方法があると思っていましたセルが編集されてから変更するのではなく、データ配列から元の値を集めるだけです。私は2つの配列に固執すると思う。ご協力ありがとうございました。 –

関連する問題