Java 将行插入JTable时重复的值

Java 将行插入JTable时重复的值,java,swing,jtable,Java,Swing,Jtable,我在将行插入JTable时遇到问题,我不知道问题出在哪里 我就是这样做的: ((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray()); DefaultTableModel dtm = (DefaultTableModel)myJTable.getModel(); for (MyRowObject row : webSiteDownloader.getWebSit

我在将行插入
JTable
时遇到问题,我不知道问题出在哪里

我就是这样做的:

((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray());
DefaultTableModel dtm = (DefaultTableModel)myJTable.getModel();
for (MyRowObject row : webSiteDownloader.getWebSites()) {
  dtm.insertRow(0, row.toArray());
}
webSiteDownloader
是一个具有
ArrayList
的对象。我可以通过调用方法
getWebSites
获得该数组

问题是,当我插入一行并添加第二行时,
JTable
只显示第一行,但重复了两次。我够清楚了吗


Thks:D

我将在黑暗中拍摄,并猜测您希望完成以下任务:

((DefaultTableModel)myJTable.getModel()).insertRow(0,webSiteDownloader.getWebSites().toArray());
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;
  }
}
公共类MyTableModel扩展了AbstractTableModel
{
受保护的列表行;
公共MyTableModel()
{
行=新的ArrayList();
}
公共无效添加(MyObject对象)
{
行。添加(obj);
}
@凌驾
public int getRowCount()
{
返回rows.size();
}
@凌驾
public int getColumnCount()
{
//该值将是常量,但通常您还需要
//要覆盖getColumnName以返回列名吗
//从数组中,在这种情况下,可以返回长度
//使用列名替换数组的名称
返回2;
}
@凌驾
公共对象getValueAt(int行,int列)
{
MyObject obj=行。获取(行);
//更改此选项以匹配您的列
开关(列){
案例0:返回obj.getId();
案例1:返回obj.getName();
}
返回null;
}
}

Icky代码。非标准格式。受保护的。错过决赛。当可以在声明行上进行初始化时,在构造函数中进行初始化。一些返回,一些未在交换机中处理。返回随机(
null
)值,而不是引发异常。缺少@Override。如果不从AbstractTableModel调用继承的FirexxEvent()方法,则TableModel无法工作!对add()的任何调用都不会刷新JTable!也是这样。我为所有愚蠢的失误感到抱歉,这里。这只是为了作为一个基本的例子来说明这个原则,作为一个基本的帮助开始,所以我不是一个彻底的,因为我应该。