2010-07-10 7 views
1

AbstractTableModel을 사용할 때 문제가 발생합니다. 데이터의 컨테이너로 연결된 목록을 사용하고 db의 테이블에서 레코드를 가져 와서 테이블 모델의 링크 된 목록에 넣은 다음 남성 jable.setModel (model). 문제는 내가 DB에서 테이블에서 가져온 마지막 레코드가 데이터베이스의 레코드 수이기 때문에 n 번 반복된다는 것을 직면합니다. 그리고 내가 만들 때 model.getIndextOF (anAppointmentDate); 매번 0을 반환하므로 객체가 매번 같은 장소에 삽입 될 때마다 생각할 수 있습니까? 내가 틀릴 수도 있지만, 내가 생각 공용 클래스 appointmentModel 내가 모델을초록 테이블 모델

while (resultSet.next()) { 
      N_Date= resultSet.getDate("appointDate"); 
      anAppointment.setDateOFAppointment(N_Date); 

      N_time = resultSet.getString("appointTime"); 
      anAppointment.setTimeOfAppointment(N_time); 
      tableModel.insertRecord(anAppointment); 

      } 
      jTable.setModel(tableModel);  

출력을 사용하여 여기 {

List<appointmentDate> patientAppointment; 

public appointmentModel() { 
    patientAppointment = new LinkedList<appointmentDate>(); // linked list 
} 

public int getRowCount() { 
    return patientAppointment.size(); 
} 

public int getColumnCount() { 
    return 2; 
} 

public String getValueAt(int rowIndex, int columnIndex) { 
    if (columnIndex == 0) { 
     return patientAppointment.get(rowIndex).getDateOFAppointment(); 
    } else if (columnIndex == 1) { 
     return patientAppointment.get(rowIndex).getTimeOfAppointment(); 
    } else { 
     return "Not found"; 
    } 
} 

public String getColumnName(int column) { 
    if (column == 0) { 
     return "date"; 
    } else if (column == 1) { 
     return "time"; 
    } else { 
     return "not found"; 
    } 
} 

public void insertRecord(appointmentDate anAppointmentDate) 
{ 
    list.add(anAppointmentDate); 
    fireTableRowsInserted(list.size()-1, list.size()-1); 
    System.out.println(list.indexOf(anAppointmentDate)); // each time it prints 0   
} 

////////// AbstractTableModel가 확장 내가 가지고있는 마지막 레코드가 모든 테이블 레코드에서 반복된다. plz help!

+1

그래서 어떻게 될까요? 어디서 그것을 놓기를 원합니까? 어떻게 당신의 목록을 사용하고 싶습니까? –

+0

서식있는 코드; 잘못된 경우 되돌려주십시오. – trashgod

+0

목록에 많은 레코드를 추가하고 싶지만 db에서 가져온 마지막 레코드가 n 번 반복됩니다 (n은 db의 레코드 수입니다) ... – palAlaa

답변

1

AppointmentDate 개체와 동일한 참조를 사용하며 내부 상태 만 변경합니다.

따라서 매번 같은 개체를 목록에 추가합니다. 따라서 마지막 루프 반복에서는 목록 안의 모든 객체를 마지막 행의 데이터로 설정합니다. - 즉 AppointmentDate하지 appointmentDate

while (resultSet.next()) { 
    AppointmentDate anAppointment = new AppontmentDate(); 
    // the rest is the same 
} 

참고 또한 클래스 이름은 대문자로 시작해야 함 :

각 루프 반복에 new AppointmentDate()의 인스턴스를,이 문제를 해결합니다.

+0

마지막으로 제대로 작동합니다, thaanx – palAlaa

1

발견!

"모델을 사용하는 곳"주변에는 코드가 충분하지 않지만 삽입 할 때마다 동일한 개체를 다시 사용하는 것처럼 보입니다. 이 객체를 가지고 있고, DB에서 나오는 속성을 속성으로 설정 한 다음 목록에 숨 깁니다.

다음과 같이 추측 해보십시오. 매번 같은 개체이므로 매번 동일한 값을 가질 것입니다! 목록에 다른 값을 원하면 고유 한 객체를 사용해야합니다. 걱정하지 마십시오. 이것은 초보자가 흔히 범하는 실수입니다.

이 작업을 수행하는 합리적인 방법은 모든 DB 레코드에 대해 new appointmentDate을 작성하는 것입니다. 생성자에서 데이터를 바로 초기화 할 수 있습니다.

마지막으로 appointmentDate이 클래스 이름 인 경우 대문자로 시작해야합니다 (규칙에 따라).


마지막으로 (좀 더) : LinkedList는 즉 get(n) 것은, 삽입에서 효율적이지만 검색에 끔찍하게 수행합니다. 삽입보다 목록에서 더 많은 스크롤링과 표시가 이루어지기를 기대하므로 여기의 실적이 훨씬 좋은 List 구현을 사용합니다. 그것은 동일하게 작동하며 삽입시 약간 느리고 검색시 훨씬 빠릅니다. 그러나 그것은 단지 당신을위한 추가 정보 일뿐입니다. 이런 작은 프로젝트에서는 성능이 그렇게 중요하지 않습니다.

+0

마지막으로 정확하게 작동합니다, thaanx – palAlaa