UIResource
UIResource (UI 리소스 마커 인터페이스)
ComponentUI 델리게이트가 만든 객체를 표시하기 위해 사용되는 마커 인터페이스입니다.
이 인터페이스 자체에는 메서드가 없고, 객체가 UI가 채워 넣은 리소스 값인지 아닌지를 구분하는 데만 쓰입니다.
본문
ComponentUI.installUI()와 uninstallUI() 메서드는 이 인터페이스를 이용해 프로퍼티 값이 이미 덮어썼는지(override)를 판단합니다.
예를 들어 BasicListUI.installUI()는 JList의 cellRenderer 프로퍼티가 초기값 null일 때만 그 값을 채웁니다.
if (list.getCellRenderer() == null) {
list.setCellRenderer((ListCellRenderer)(UIManager.get("List.cellRenderer")));
}
uninstallUI() 시점에는 값이 UIResource의 인스턴스이면 그 프로퍼티를 다시 null로 되돌립니다.
if (list.getCellRenderer() instanceof UIResource) {
list.setCellRenderer(null);
}
이 패턴은 java.awt.Component의 font, foreground, background 프로퍼티에는 적용되지 않습니다. 이 셋은 초기화되지 않았거나 명시적으로 null로 설정되면 컨테이너가 값을 제공하기 때문입니다. 그래서 동적으로 룩앤필을 바꿀 때 == null 검사는 신뢰할 수 없고, installUI() 시점에 현재 값이 UIResource인지로 판단합니다.