2016-08-12 7 views
1

JButton이 눌려지면 행이 JTable에 추가됩니다. 다음 코드를 구현하여이 작업을 시도했습니다.JTable에 행을 추가하는 중 오류가 발생했습니다

columNames = new Vector<>(); 
columNames.addElement("Name"); 
columNames.addElement("CC"); 
columNames.addElement("Age"); 
columNames.addElement("PhoneNumber"); 
columNames.addElement("Date"); 
columNames.addElement("Amount$"); 

Object[] dataList = {"name", "cc", "age", "phone", "date", "amount"}; 

data = new DefaultTableModel(columNames, 0); 
data.addRow(dataList); 

table = new JTable(data); 
JScrollPane scrollTable = new JScrollPane(table); 
scrollTable.setBounds(22, 78, 764, 177); 
scrollTable.setViewportView(table); 

//ActionListener method!. 

if(e.getActionCommand().equals("Add client")) 
{ 
    Object[] dataList = {"name", "cc", "age", "phone", "date", "amount"}; 
    data.addRow(dataList); 

    DefaultTableModel defaut = (DefaultTableModel) table.getModel(); 
    defaut.addRow(dataList); 
} 

그것은 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException 던졌습니다 :

-1 내가 그것을 어떻게 해결할 수 있습니까?

+2

**, 한 번 데이터 객체를 통해 한 번 추출 된 테이블 모델을 통해 - 왜 ? 간단히 한번 추가하려고하지 않습니까? –

+2

TrashGod의 답이 문제를 해결하는 데 도움이되지 않는 경우, trashgod가 이미 아래에 게시 한 것과 유사한 유효한 [mcve]라는 작은 자체 포함 프로그램을 작성하여 게시 해보십시오. –

+0

@HovercraftFullOfEels 두 번째를 추가하는 중 두 번째 시도는 새 행을 추가 할 Action 수신기입니다. – Cohen

답변

3

아래의 전체 예제에서와 같이 조각이 올바르게 작동하는 것으로 보입니다. 이 예제는 전체 코드에서 문제를 격리하는 데 도움이 될 수 있습니다. 또한, 대신 setBounds()

image

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.util.Vector; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

/** 
* @see https://stackoverflow.com/a/38926460/230513 
*/ 
public class Test { 

    private final Object[] dataList = {"name", "cc", "age", "phone", "date", "amount"}; 

    private void display() { 
     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Vector columNames = new Vector<>(); 
     columNames.addElement("Name"); 
     columNames.addElement("CC"); 
     columNames.addElement("Age"); 
     columNames.addElement("Phone"); 
     columNames.addElement("Date"); 
     columNames.addElement("Amount$"); 
     DefaultTableModel data = new DefaultTableModel(columNames, 0); 
     data.addRow(dataList); 
     JTable table = new JTable(data); 
     JScrollPane scrollTable = new JScrollPane(table); 
     scrollTable.setViewportView(table); 
     f.add(new JScrollPane(table)); 
     f.add(new JButton(new AbstractAction("Add") { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       data.addRow(dataList); 
      } 
     }), BorderLayout.PAGE_END); 

     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Test()::display); 
    } 
} 
귀하의 ActionListener 두 번 테이블 모델 **에 데이터 목록 배열을 추가하려고 시도 할
관련 문제