2

行を a に挿入するJTable際に問題があり、何が問題なのかわかりません。

私はまさにこのようにします:

((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray());

webSiteDownloader、 を持つ 1 つのオブジェクトですArrayList。method を呼び出してその配列を取得できますgetWebSites

問題は、1 つの行を挿入して 2 番目の行を追加するとJTable、最初の行のみが表示されますが、2 回繰り返されることです。私は十分に明確でしたか?

ありがとう:D

4

1 に答える 1

3

暗闇の中でショットを撮り、次のようなことを達成したいと推測します。

DefaultTableModel dtm = (DefaultTableModel)myJTable.getModel();
for (MyRowObject row : webSiteDownloader.getWebSites()) {
  dtm.insertRow(0, row.toArray());
}

addRow の代わりに insertRow を使用している特別な理由はありますか?

また、AbstractTableModel を拡張して独自の特別な目的の TableModel を展開することを強くお勧めします。基本的な未テストの例:

public class MyTableModel extends AbstractTableModel
{
  protected List<MyObject> rows;

  public MyTableModel()
  {
    rows = new ArrayList<MyObject>();
  }

  public void add(MyObject obj)
  {
    rows.add(obj);
  }

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

  @Override
  public int getColumnCount()
  {
    // This value will be constant, but generally you'd also
    // want to override getColumnName to return column names
    // from an array, and in that case you can return the length
    // of the array with column names instead
    return 2;
  }

  @Override
  public Object getValueAt(int row, int column)
  {
    MyObject obj = rows.get(row);

    // Change this to match your columns
    switch(column) {
      case 0: return obj.getId();
      case 1: return obj.getName();
    }

    return null;
  }
}
于 2009-04-27T22:53:10.983 に答える