2012-08-04 20 views
5

OK, voglio ottenere tutti i dati dalla prima colonna di un JTable. Però il modo migliore sarebbe tirarlo in un ArrayList, quindi ne ho fatto uno. Ho anche fatto un esempio di un TableModel:Come ottenere dati da una tabella J?

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); 
} 

Questo mi dà una NullPointerException (urla cue). Che cosa sto facendo di sbagliato?

+0

'modello DefaultTableModel statico' Rimuovere la parola chiave' static'. Qualunque cosa stavi cercando di risolvere usando, è molto probabilmente meglio risolto in un altro modo. –

+0

Quando viene lanciato un puntatore nullo, ti dirà esattamente da quale numero di linea è stata lanciata l'eccezione. Potresti aggiungere un commento al tuo codice indicando la riga che genera l'eccezione del puntatore nullo? (A un certo punto deve tornare al tuo codice - potrebbe non essere il primo nella traccia dello stack) –

risposta

7

non so quelle classi bene, ma direi che dovrete contare da zero:

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

In Java, si è soliti contare da 0 (come nella maggior parte simile al C lingue) ...

+0

che dà un NullPointer perché non c'è 0'th row – Primm

+0

Fa veramente contare da 1 ?? Hmm ... E c'è una colonna 1? –

+0

2 colonne in realtà – Primm

2

È meglio se è possibile pubblicare SSCCE che mostra l'inizializzazione del modello e la sua popolazione con i dati. Includere anche i dettagli dell'eccezione in quanto potrebbero esserci più fonti per il problema.

Ecco una demo basata su @CedricReichenbach correzione:

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); 
    } 
} 

Il risultato è:

[1, 2] 
1

So che questa risposta è un po 'in ritardo, ma in realtà è un problema molto facile da risolvere. Il tuo codice dà un errore durante la lettura della voce perché non c'è alcuna voce nella tabella stessa per il codice da leggere. Compila la tabella ed esegui nuovamente il tuo codice. Il problema avrebbe potuto essere risolto in precedenza ma dal codice che hai postato non era chiaro cosa c'era dentro il tuo tavolo.

Problemi correlati