2009-07-14 4 views
0

모든 xx 초마다 업데이트되는 라이브 (외부) 데이터 소스로 채워지는 테이블 모델이 있습니다. 데이터는 JTable에 표시됩니다.라이브 데이터로 JTable 편집기 변경

사용자는 AbstractCellEditor을 확장하는 셀 편집기를 통해 표 셀의 데이터를 무시할 수 있습니다. 사용자가 클릭하면 코드는 새 값이 표 모델의 값과 같은지 확인합니다. 그렇지 않으면 오버라이드라고 가정합니다.

문제는 필드를 클릭하고 값을 변경하지 말고 외부 데이터 소스가 테이블 모델을 업데이트하는 경우 코드는 사용자가 단순한 값이 아닌 이전 값을 사용하여 재정의를 설정했다고 생각합니다. 오버라이드를 취소합니다.

이것을 수행하기위한 표준 논리 및 구현은 무엇입니까?

답변

0

사용자가 을 변경했는지 여부를 어떻게 감지합니까?

셀 편집기를 통해 변경된 내용을 수신하는 TableCellListener 클래스를 만들었습니다. 셀이 편집을 시작하기 전에 값의 복사본을 가져 와서 편집을 중지 한 후 셀의 값과 비교합니다. 그것은 당신이 원하는 것 같아 보입니다.

또 다른 해결책은 백그라운드에서 TableModel을 업데이트하기 전에 테이블이 현재 셀을 편집하고 있는지 확인하는 것입니다. 어쩌면 사용자가 업데이트를 수락하거나 취소 할 수있는 대화 상자를 팝업 할 수 있습니다.

0

테이블 모델은 테이블 셀이 셀 단위로 재정의되었는지를 나타내는 상태를 유지해야합니다. 그렇게하지 않으면 사용자가 셀을 오버라이드하고 라이브 데이터가 들어오고 사용 된 값과 동일한 값으로 변경되는 문제가 발생합니다. 그런 다음 해당 오버라이드를 취소합니다.

TableModel에있는 재정의 setValueAt(Object,int,int) 방법으로이 상태를 채울 수 있습니다. 이 메서드는 AbstractCellEditor 편집이 완료되면 JTable에 의해 호출됩니다.