2012-08-04 68 views
5

好的,我想從JTable的第一列中獲取所有數據。我雖然最好的辦法是將它拉到ArrayList,所以我做了一個。我還做了一個TableModel的一個實例:如何從JTable獲取數據?

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(線索尖叫聲)。我究竟做錯了什麼?

+0

'Static DefaultTableModel model'移除'static'關鍵字。無論你試圖用它來解決什麼,最有可能以另一種方式更好地解決。 – 2012-08-04 23:13:01

+0

當拋出一個空指針時,它會告訴你究竟是從哪個行號拋出異常。你能否給你的代碼添加一個註釋來指示引發空指針異常的行? (在某些時候,它必須回到你的代碼 - 它可能不是第一個堆棧跟蹤) – 2012-08-06 04:36:16

回答

7

我不知道這些類很好,但我猜你必須從零到數:

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

在Java中,通常從0(計數像大多數C類語言)...

+0

,它給出了一個空指針,因爲沒有第0行 – Primm 2012-08-04 21:37:04

+0

它真的從1計數?嗯...有一列1嗎? – 2012-08-04 21:38:32

+0

實際上2列 – Primm 2012-08-04 21:41:44

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] 
1

我知道這個答案是有點晚,但它實際上是一個非常簡單的問題解決。讀取條目時,您的代碼會產生錯誤,因爲表中沒有條目供代碼讀取。填充表格並再次運行您的代碼。問題可能早就解決了,但是從你發佈的代碼來看,你的表格裏面並沒有什麼明顯的東西。