如何从 JTable 中获取数据?

Posted

技术标签:

【中文标题】如何从 JTable 中获取数据?【英文标题】:How to get data from a JTable? 【发布时间】:2012-08-02 11:18:52 【问题描述】:

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

【问题讨论】:

static DefaultTableModel model 删除 static 关键字。无论您尝试使用它解决什么问题,都可能以另一种方式更好地解决。 当一个空指针被抛出时,它会准确地告诉你异常是从哪个行号抛出的。您能否在您的代码中添加注释,指出引发空指针异常的行? (在某些时候它必须回到你的代码 - 它可能不是堆栈跟踪中的第一个) 【参考方案1】:

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

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

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

【讨论】:

给出一个 NullPointer 因为没有第 0 行 真的从1开始算吗??嗯……还有第 1 列吗? 哪一行会抛出 NullPointerException? 空指针可能来自模型,而不是这个循环,循环读取正确【参考方案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]

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:
       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);
        

【讨论】:

以上是关于如何从 JTable 中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 jtable 中的复选框中获取选中的值?

如何在单击JButton后刷新JTable

如何将值设置为jtable?

获取数据以填充 JTable netbeans

如何在我的jtable中获得超过100行?

JAVA中从Mysql取数据到JTable