2011-03-22 3 views
0

JTable DefaultCellRenderer가 Object.class를 설정하면 BigDecimal Type에서 작동하지 않습니다.

하지만 내 테이블 렌더링은 다음과 같이 작동합니다. 유형이있는 열을 적용하지 않았습니다. "BigDecimal", 기타 문자열 필드는 모두 정상적으로 작동합니다.

그리고 나서, 한 줄 더 추가합니다.

setDefaultRenderer(BigDecimal.class, new MyTableRenderer()); 

그러면 모든 것이 올바르게 작동합니다. 왜 이런 식으로?

답변

2

JTable은 기본적으로 Number 유형의 렌더러를 설치합니다. BigDecimal은 Number입니다. 따라서 사용자 정의 렌더러 대신 기본 렌더러가 사용됩니다.

BTW : 사용자 지정 렌더러는 정렬/필터링 된 행을 고려하지 않으므로 버그가 있습니다 (메서드의 행/열 인덱스 매개 변수는 뷰 좌표입니다).

@eugener : 당신의 대답은 잘못된 것입니다 - 그것은 중요 저장하지만 조회 ;-)

건배 아니다 지넷

0

를 적어 보면 :

public void setDefaultRenderer(Class<?> columnClass, TableCellRenderer renderer) { 
    if (renderer != null) { 
     defaultRenderersByColumnClass.put(columnClass, renderer); 
    } else { 
     defaultRenderersByColumnClass.remove(columnClass); 
    } 
} 

이 열 클래스가 핵심이며, 그 클래스 비교가 문자 그대로의 의미지도를 사용합니다. 이것은 귀하가 겪고있는 행동의 이유를 설명해야합니다. 이는 의도적으로 설계된 동작입니다.