2011-02-24 94 views
2

我在设计时有5行JTable。现在,我必须添加更多的行,因为我动态去。当我添加更多行时,出现数组超出界限的异常错误。我如何解决这个问题?JTable添加新行

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

你使用的是什么样的表模型? DefaultTableModel,你自己做的一个? – MeBigFatGuy 2011-02-24 05:58:03

+0

我是usign DefaultTableModel。但我删除了一列,并改变了每列的宽度.. – Deepak 2011-02-24 06:02:06

回答

4

这对我的作品

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

看看我的代码.. – Deepak 2011-02-24 06:21:27

+2

看看我的:) – MeBigFatGuy 2011-02-24 06:30:02

+2

@Deepak,我们不是在这里给你喂匙代码。你被要求发布SSCCE而你没有。您被要求阅读API,并且由于您的代码没有使用addRow(...)方法,所以您还没有看到它。你已经得到了一些工作代码来看,所以如果你不了解它,请看看它并提出具体的问题。比较工作代码和你的代码,看看有什么不同。 – camickr 2011-02-24 06:33:14

3

DefaultTableModel有一个您应该使用的addRow(...)方法。

如果您需要更多帮助,请发布您的SSCCE来证明问题。

+0

我已经发布了我正在使用的代码..和我找不到addRow().. – Deepak 2011-02-24 06:17:43

+1

阅读API,这是您将找到可用于任何方法类。 – camickr 2011-02-24 06:19:23

4

我假设你有一个表使用6列。 按照此代码,它会追加一个新行已经存在的表

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

其中JTable的表=新的JTable(数据,COLUMNNAMES);