同じ情報を含む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();
}
}
}
私の質問はこれを行うための簡単な方法、二つの同一のデータ配列を作成する必要がないものがあるかどうかではありません。ありがとうございました。
より良いヘルプのためにあなたのコードは何ですか?SSCCE/MCVE、ショートカット、実行可能、コンパイル可能、JTable/XxxTableModelのハードコードされた値をローカル変数 – mKorbel