2016-05-24 13 views
1

私の割り当てをやってみて、私は編集できないセルに問題がありましたが、編集可能になったのですが、編集の結果はarraylistに設定されませんでした。インターネットからのソリューションですが、動作しません。 登録システムのような私の仕事は、ゲストに関する情報を取得し、csvファイルに保存します。追加機能では、プログラムは表示、更新、削除、および検索機能を行わなければなりません。特別な抽象モデルで列を編集する方法JTable

更新、削除、検索なしですべて完了しました。あなたは私のコードを見て、助けてくれ、アドバイスやリンクなどを提供してください。

これは私の抽象モデルである:

public class ddispmodel extends AbstractTableModel { 
private final String[] columnNames = { "FirstName", "SecondName", "Date of              
birth", "Gender", "Email", "Address", "Number", "Attending","ID" }; 
private ArrayList<String[]> Data = new ArrayList<String[]>(); 
private boolean editable; 


public void AddCSVData(ArrayList<String[]> DataIn) { 
    this.Data = DataIn; 
    this.fireTableDataChanged(); 
} 

@Override 
public int getColumnCount() { 
    return columnNames.length;// length; 
} 

@Override 
public int getRowCount() { 
    return Data.size(); 
} 

@Override 
public String getColumnName(int col) { 
    return columnNames[col]; 
} 

@Override 
public Object getValueAt(int row, int col) { 
    return Data.get(row)[col]; 
} 
public boolean isCellEditable(int row, int col) { 
    setValueAt(Data, row, col); 
    this.fireTableCellUpdated(row, col); 
    return true; 
} 
} 

これは私のメインクラス の一部であり、それは、メニュー項目の魔女のアクションリスナーがあるため、それはほぼ1000(私は、すべてのクラスをコピーしていなかった機能 を表示するアクティブであります

012をArrayListにCSVファイルから日付を変換する行が、)それは、必要に応じて、私はすべてのコードを提出することができ

dlog.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent e){ 
     CSVFileDomestic Rd = new CSVFileDomestic(); 
     ddispmodel ddispm = new ddispmodel(); 
      ddisp.setModel(ddispm); 
      File DataFile = new File("D:\\cdne4\\WorkPlace\\Domestic.csv"); 
      ArrayList<String[]> Rs2 = Rd.ReadCSVfile(DataFile); 
      ddispm.AddCSVData(Rs2); 
      System.out.println("Rows: " + ddispm.getRowCount()); 
      System.out.println("Cols: " + ddispm.getColumnCount()); 

     cl.show(cp, "dispDomPanel"); 
    } 
    }); 

とFileクラス

私は、Javaに新しいですし、これが私の最初のプログラムであり、あなたがオーバーライドする必要がある、あなたは、より簡単に

答えて

2

説明することができますが、編集の結果は、ArrayListの時に設定されていなかった、

ください。データを保存するTableModelのsetValueAt(...)メソッド。

それはのようになります。

String[] row = data.get(row); 
row[column] = value; 
this.fireTableCellUpdated(row, col); 

また、isCellEditable(...)方法は、任意の処理を行うべきではありません。指定された列のtrue/falseを返します。すべての列を編集可能にしたい場合は、次のようにする必要があります。

public boolean isCellEditable(int row, int col) { 
    //setValueAt(Data, row, col); 
    //this.fireTableCellUpdated(row, col); 
    return true; 
} 
+0

このようなことをやってみましたが、私は行のようなエラーを受け取りました。 - 変数duplicateとメソッド.get )はarraylistには適用されません –

+0

'行 - 重複変数です。 ' - はい、明らかに私の間違いです。時間のかかるコードの概念を理解し、変数に別の名前を付けてください。 'メソッド.get()はarraylistには当てはまりません.' - 最初の問題を修正すれば、2番目の問題はなくなるはずです。再び "行"が重複変数である場合、コンパイラは "行"の適切なデータ型が何であるかを知らないため、文の解決方法を知らない。 – camickr

0

)と他のオプションを実行します。 camickrは助けてくれてありがとう、私に答えてくれます) 私はそれをやろうとして約6時間を費やし、ついにそれを得ました。 誰か面白い、答えはので、私はちょうど私のcamickrを言った新しいメソッドのsetValueAtを作る

public boolean isCellEditable(int row, int col) { 
    return true; 
} 
@Override 
public void setValueAt(Object aValue, int row, int col){ 
    Data.get(row)[col]= (String) aValue; 
    fireTableCellUpdated(row,col); 

ある場合。 私はOracleのサイトに行って、それについて読んで、それをやってみたが、 はありません。なぜなら、aValueはオブジェクトからStringに変換できず、最後にaValueをStringとして開始するからですそれはすべてではありませんが、それはarraylistを変えるだけです。 arraylistをcsvファイルに変換する新しい方法が必要です。私は今それについて説明しています。私の理論では申し訳ありませんが、私はJavaで新しいです、それはどのように動作するかを学ぶだけです))

関連する問題