2011-08-01 1 views
1

DefaultTableModel을 사용하는 JTable이있는 GUI가 있습니다.DefaultTableModel getValueAt 메서드는 겉으로보기에 무작위 결과를 생성합니다.

이러한 인스턴스 변수 선언 :

boolean doRun = false; 
Class clazz; 
Object obyect; 
DefaultTableModel model; 
ArrayList<String> al = new ArrayList(); 

테이블이 채워된다 변수에 대한 정보를 포함

public StatusGUI(Object invokerObject) { 
    initComponents(); 
    setLocationRelativeTo(null); 
    clazz = invokerObject.getClass(); 
    obyect = invokerObject; 
    String line; 
    try { 
     Field[] fields = clazz.getDeclaredFields(); 
     for (int i = 0; i < fields.length; i++) { 
      if (!fields[i].isAccessible()) { 
       fields[i].setAccessible(true); 
      } 
      if (("" + fields[i].getType()).equals("class java.lang.String")) { 
       line = "String"; 
      } else { 
       line = "" + fields[i].getType(); 
      } 

      //Note: The first string in the Object is the description, which is left empty 

      model.insertRow(0, new Object[]{"", fields[i].getName(), line, "" + fields[i]}); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    setVisible(true); 
} 

이 (이 경우에) 발생 5 행.

내가받을 다음과 같은 코드로 버튼을 누를 때에 이러한 변수의 정보를 저장할

:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    for (int i = 0; i < model.getRowCount(); i++) { 
     String description = "" + model.getValueAt(i, 0); 
     System.out.println("Description " + i + ": " + description); 
     String name = "" + model.getValueAt(i, 3); 
     if (!description.equals("") && description != null) { 
      al.add(description + "::" + name); 
     } 
    } 
    if (al.isEmpty()) { 
     JOptionPane.showMessageDialog(this, "No descriptions were added to any of the variables." 
       + "\nThis could also be because no variables were found - if so, please see 'Help'"); 
    } else { 
     new Thread(new SendThread(al, obyect)).start(); 
     this.dispose(); 
    } 
}           

다섯 개 모든 행에 설명을 추가, 위의 코드는 다음과 같은 출력이 생성

Description 0: d1 
Description 1: d2 
Description 2: d3 
Description 3: d4 
Description 4: 

경우에만 JTable가 첫 번째 행에 대한 설명을 추가하는 상기 코드 생성

0,123,221

이것은 5 개의 행 모두를 인식하지만 일부 이유로 인해 행에서 읽을 때 엉망입니다.

저는 한 시간 동안 동일한 코드 라인을보고 있었으며 솔직히 잘못된 점을 보지 못했습니다.

미리 감사드립니다. 마이크.

답변

3

제 수정 구슬이 테이블이 여전히 편집 중이라고 말합니다 (첫 번째 줄의 5 번째 줄, 두 번째 줄의 줄 0). 수행 된 작업에서 먼저 편집을 커밋하십시오.

if (table.isEditing()) { 
    table.getCellEditor().stopCellEditing(); 
} 
+1

배터리가 포함되어 있지 않습니다. +1 – mKorbel

+0

고마워요, 저를 위해서 :) 하지만 생성자에서이 작업을 수행 할 수없는 이유는 무엇입니까? stopCellEditing()을 단순히 실행하면 nullpointer가 나타납니다. statement –

+0

그런 다음 아직 테이블을 만들지 않았거나 isEditing() 확인을하지 않았습니다. 그러나 생성자 내부에서 편집을 중지하면 그 시점에서 테이블이 아직 화면에 표시되지 않기 때문에 아무런 의미가 없습니다. –

3

그러나, 왜 그냥 생성자에서이 작업을 수행 할 수 있도록하지 않는 것?

이렇게하려면 표에 속성을 설정할 수 있습니다. Table Stop Editing을 참조하십시오.