如何从JTable获取数据?

好的,我想从JTable的第一列中获取所有数据。我虽然最好的方法是把它拉到一个,所以我做了一个。我还做了一个实例:ArrayListTableModel

static DefaultTableModel model = new javax.swing.table.DefaultTableModel(); 
f.data.setModel(model); //f.data is the JTable

public static final void CalculateTotal(){
    ArrayList<String> numdata = new ArrayList<String>();

  for(int count = 1; count <= model.getRowCount(); count++){
      numdata.add(model.getValueAt(count, 1).toString());

  }
  System.out.println(numdata); 
}

这给了我一个NullPointerException(提示尖叫)。我做错了什么?


答案 1

我不太了解这些类,但我想你必须从零开始计数:

for (int count = 0; count < model.getRowCount(); count++){
  numdata.add(model.getValueAt(count, 0).toString());
}

在Java中,通常从0开始计数(就像在大多数类似C语言中一样)...


答案 2

最好可以发布显示模型初始化及其数据填充的 SSCCE。还要包括异常的详细信息,因为问题可能有多个来源。

下面是基于@CedricReichenbach校正的演示:

import java.util.ArrayList;
import java.util.List;

import javax.swing.table.DefaultTableModel;

public class TestModel {
    public static void main(String s[]) {
        DefaultTableModel model = new javax.swing.table.DefaultTableModel();    

        model.addColumn("Col1");
        model.addColumn("Col2");

        model.addRow(new Object[]{"1", "v2"});
        model.addRow(new Object[]{"2", "v2"});

        List<String> numdata = new ArrayList<String>();
        for (int count = 0; count < model.getRowCount(); count++){
              numdata.add(model.getValueAt(count, 0).toString());
        }

        System.out.println(numdata); 
    }
}

结果是:

[1, 2]

推荐