2011-12-30 2 views
1

테이블에서 업데이트 이벤트를 catch하고 영향을받는 열 + 행에 대해 현재 값과 새 값을 확인하려는 경우가 있습니다. 예상치 못한 경우 업데이트를 취소하고 이전 버전으로 되돌리려합니다. 이것은 TableModelListener와 함께하기가 매우 어렵고 스택 오버플로 오류로 계속 실행됩니다. 왜냐하면 수동으로 상태를 유지하고 재귀 적으로 다시 호출하지 않고 되돌릴 수 없기 때문입니다.스윙에서 테이블 업데이트 이벤트 취소

+0

TableModelEvent가 실행되면 해당 데이터가 모델에서 이미 변경된 것입니다. 이벤트를 취소하기에는 너무 늦었습니다. 모델이 변경되지 않도록 셀 버전을 취소해야합니다. –

+0

나는 JB가 그 상태를 수동으로 유지하려고 노력한 이유와 그 해결책이 역효과를 이해한다. 셀 편집을 취소하려면 어떤 이벤트를 잡아야합니까? 어떻게 취소합니까? .. 도와 주셔서 감사합니다. – sethu

+0

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#validtext를 참조하십시오. –

답변

3

자신 만의 TableModel을 만들거나 DefaultTableModel 또는 AbstractTableModel을 확장하고 setValueAt를 재정의하십시오. 기본 모델을 super.setValueAt()로 업데이트하거나 버리거나 저장하지 않아도됩니다. 수퍼 클래스를 호출하지 않으면 변경 사항이 적용되지 않으므로 이전 값입니다.

+0

beautiful .. 이제 왜 그런 생각을하지 않았는 지 .. :) .. Thanks Kylar .. – sethu

+0

editCellAt()와 editingStopped() 사이에 물건을 가로 챌 수도 있지만 @Kylar는 가장 단순하다고 생각합니다. 암시. – user949300