好的,我想从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(cue screams)。我做错了什么?
答案 0 :(得分:9)
我不太了解这些课程,但我猜你必须从零开始计算:
for (int count = 0; count < model.getRowCount(); count++){
numdata.add(model.getValueAt(count, 0).toString());
}
在Java中,通常从0开始计算(就像在大多数类C语言中一样)......
答案 1 :(得分: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]
答案 2 :(得分:1)
我知道这个答案有点晚了,但这实际上是一个很容易解决的问题。您的代码在读取条目时会出错,因为表中没有条目可供读取的代码。填充表格并再次运行代码。这个问题本来可以早点解决,但是从你发布的代码中可以看出你桌面的内容并不明显。
答案 3 :(得分:0)
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);
}