2011-02-24 5 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

+0

저는 DefaultTableModel을 사용하고 있습니다. 하지만 난 열을 제거하고 각 열의 너비를 변경했습니다. – Deepak

답변

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

+2

내 봐 : – MeBigFatGuy

+2

@Deepak, 우리는 당신이 코드를 숟가락 먹이 여기되지 않습니다. 당신은 SSCCE를 올리라고 요청한 곳과하지 않았습니다. API를 읽도록 요청 받았으며 코드에서 addRow (...) 메소드를 사용하지 않았으므로 표시되지 않은 것으로 보입니다. 살펴볼 작업 코드가 제공되었으므로 이해하지 못하면 구체적인 질문을하십시오. 작업 코드와 코드를 비교하여 차이점을 확인하십시오. – camickr

3

DefaultTableModel에는 사용해야하는 addRow (...) 메소드가 있습니다.

추가 도움이 필요하면 문제를 나타내는 SSCCE을 게시하십시오.

+0

내가 사용하고있는 코드를 게시했습니다 .. 그리고 내가 찾을 수없는 addRow() .. – Deepak

+1

어디서나 사용할 수있는 방법을 찾을 수있는 API를 읽습니다 수업. – camickr

4

작동 난 당신이 여섯 열이있는 테이블을 가정합니다. 이 코드를 따라 , 그것은 새 행을 추가합니다 이미 존재하는 테이블

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