如何从 JTable 获取数据



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

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(提示尖叫)。我做错了什么?

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

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

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

最好

发布显示模型初始化及其数据填充的 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]
我知道

这个答案有点晚了,但这实际上是一个非常容易解决的问题。代码在读取条目时出错,因为表本身中没有条目供代码读取。填充表并再次运行代码。这个问题本可以更早解决,但从您发布的代码来看,您的表格中的内容并不明显。

       DefaultTableModel model = (DefaultTableModel) table.getModel();
        for (int i = 0; model.getRowCount() > i; i++) {
            final String col1 = (String) model.getValueAt(i, 0);
            final String col2 = (String) model.getValueAt(i, 1);
            System.out.println("Row: " + i + " Col 0: " + col1);
            System.out.println("Row: " + i + " Col 1: " + col2);
        }

最新更新