将行插入JTable时重复的值

时间:2009-04-27 22:02:30

标签: java swing jtable

我在将行插入JTable时遇到问题,我不知道问题是什么。

我确实喜欢这样:

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

webSiteDownloader是一个拥有ArrayList的对象。我可以让该数组调用方法getWebSites

问题在于,当我插入一行,添加第二行时,JTable仅显示第一行,但重复两次。我清楚了吗?

Thks:D

1 个答案:

答案 0 :(得分:3)

我会在黑暗中拍摄并猜测你想要完成这样的事情:

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

是否有特殊原因使用insertRow而不是addRow?

另外,我非常想建议您通过扩展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;
  }
}