2011-02-24 4 views
2

J'ai un JTable avec 5 lignes au moment de la conception. Maintenant, je dois ajouter plus de lignes que je vais dynamiquement. Je reçois un tableau hors de l'erreur d'exception lorsque j'ajoute plus de lignes. Comment puis-je résoudre ce problème?JTable ajout d'une nouvelle ligne

item_list = new javax.swing.JTable(); 
item_list.setModel(new javax.swing.table.DefaultTableModel( 
    new Object [][] { 
     {null, null, null}, 
     {null, null, null}, 
     {null, null, null}, 
     {null, null, null} 
    }, 
    new String [] { 
     "No.", "Description", "Cost" 
    } 
) { 
    Class[] types = new Class [] { 
     java.lang.Integer.class, java.lang.String.class, java.lang.Float.class 
    }; 

    public Class getColumnClass(int columnIndex) { 
     return types [columnIndex]; 
    } 
}); 
item_list.getColumnModel().getColumn(0).setPreferredWidth(30); 
item_list.getColumnModel().getColumn(1).setPreferredWidth(100); 
item_list.getColumnModel().getColumn(2).setPreferredWidth(50); 
jScrollPane2.setViewportView(item_list); 
+0

Quel type de modèle de table utilisez-vous? DefaultTableModel, un de vos propres moyens? – MeBigFatGuy

+0

je suis usign DefaultTableModel. mais j'ai enlevé une colonne et changé la largeur de chaque colonne .. – Deepak

Répondre

4

cela fonctionne pour moi

import javax.swing.*; 
import javax.swing.table.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Grow extends JFrame { 

    private static final Object[][] rowData = {{"Hello", "World"}}; 
    private static final Object[] columnNames = {"A", "B"}; 

    private JTable table; 
    private DefaultTableModel model; 

    public Grow() { 
     Container c = getContentPane(); 
     c.setLayout(new BorderLayout()); 

     model = new DefaultTableModel(rowData, columnNames); 
     table = new JTable(); 
     table.setModel(model); 
     c.add(new JScrollPane(table), BorderLayout.CENTER); 
     JButton add = new JButton("Add"); 
     c.add(add, BorderLayout.SOUTH); 
     add.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       model.addRow(rowData[0]); 
      } 
     }); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
    } 

    public static void main(String[] args) { 
     Grow g = new Grow(); 
     g.setLocationRelativeTo(null); 
     g.setVisible(true); 
    } 
} 
+0

jeter un oeil à mon code .. – Deepak

+2

jeter un oeil à la mienne :) – MeBigFatGuy

+2

@Deepak, nous ne sommes pas ici pour cuillère nourrir votre code. Vous avez été invité à poster un SSCCE et vous ne l'avez pas fait. Vous avez été invité à lire l'API et il semble que vous ne l'avez pas fait car votre code n'utilise pas la méthode addRow (...). Vous avez reçu un code de travail à regarder, alors jetez un coup d'œil et posez des questions spécifiques si vous ne le comprenez pas. Comparez le code de travail avec votre code pour voir ce qui est différent. – camickr

3

Le DefaultTableModel a une méthode addRow (...) que vous devriez utiliser.

Si vous avez besoin de plus d'aide, postez votre SSCCE qui montre le problème.

+0

J'ai posté le code que j'utilise .. et je ne peux pas trouver addRow() .. – Deepak

+1

Lisez l'API, c'est là que vous trouverez les méthodes disponibles pour tout classe. – camickr

4

Je suppose que vous avez une table avec six colonnes. Suivre ce code, il ajoutera une nouvelle ligne à la table déjà existantes

DefaultTableModel defaultModel = (DefaultTableModel) table.getModel(); 
     Vector newRow = new Vector(); 
     newRow.add("Total Amount Spend"); 
     newRow.add(TotalAmt); 
     newRow.add(Apaid); 
     newRow.add(Bpaid); 
     newRow.add(Cpaid); 
     newRow.add(Dpaid); 
     defaultModel.addRow(newRow); 

Où tableau JTable = new JTable (données, ColumnNames);

Questions connexes