2012-07-07 1 views
0

삽입 된 데이터와 jtable에 표시되지 않는 데이터에 대해 읽은 것과 비슷한 문제가 있습니다. repaint() 및 revalidate()를 시도했지만 아무 소용이 없습니다.jtable 업데이트 데이터가 표시되지 않습니다.

기본적으로 A와 B 두 클래스가 있습니다. A 클래스의 함수를 호출하여 테이블에 데이터 행을 추가합니다. 여기에 코드입니다. (I 업데이트를 처리하기 위해 테이블을 추가 한 다음 몇 가지 코드를 추가 넷빈즈 7.1.2을 사용하고 그런데.)

public void callUpdateTable(){ 
    DefaultTableModel myModel = (DefaultTableModel)jTable1.getModel(); 
    DateFormat dateFormate = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); 
    Object[] str = new Object[3]; 
    Date date = new Date(); 

    str[0] = dateFormate.format(date); 
    str[1] = "Robot"; 
    str[2] = "hello"; 
    // myModel.addRow(str); 
    myModel.insertRow(1, str); 
    myModel.setValueAt("Hello", 1, 2); 
    System.out.println("count = " + myModel.getValueAt(1, 2)); 
    jTable1.repaint(); 
} 

시스템에 인쇄 재미있는 것은 그것이 값을 출력 셀 (1,2)에서 값을 설정했지만 표에는 나타나지 않습니다. 도와 줘서 고마워.

+4

데이터를 변경하고있는 JTable, jTable1이 표시되고있는 JTable 인스턴스입니까? 내 경험에 비추어 볼 때, 이와 같은 오류는 종종 오해 된 참조 중 하나 때문인 것으로 나타났습니다. 귀하의 게시물과 코드는 귀하에게 확신을 가지고 답변을 드릴 수있을만큼 충분히 알려주지는 않습니다. 누군가가 운 좋은 추측을하지 않는 한 더 유익한 질문을해야합니다. –

답변

4

문제를 나타내는 SSCCE을 구성하는 것이 가장 좋습니다.

repaint()/revalidate()으로 전화 할 필요가 없습니다. insertRow()의 결과로 모델은 fireTableRowsInserted()을 실행하여 테이블 새로 고침을 트리거합니다.

DefaultTableModel은 0부터 시작하는 인덱스가있는 vector을 사용합니다. insertRow()Vector.insertElementAt()을 호출하며 인덱스가 범위를 벗어날 경우 ArrayIndexOutOfBoundsException을 던집니다. 모델이 비어 있다고 가정

,이 시도 :

또한
myModel.insertRow(0, str); 

, 당신은 EDT의 표와 상호 작용해야합니다.