NimbusStyle
NimbusStyle
Nimbus에서 사용하는 SynthStyle 구현이에요. NimbusLookAndFeel에 등록된 각 영역은 연관된 NimbusStyle을 가져요. 따라서 NimbusLookAndFeel에 등록된 서드파티 컴포넌트는 #getStyle(JComponent, Region) 메서드에서 Look and Feel가 건네주는 NimbusStyle을 받게 돼요.
이 클래스는 표준 Nimbus 명명 규칙에 따라 UIDefaults에 배치된 값을 적절히 읽고 가져와요. 거기에 저장된 페인터, 폰트, 색상 및 기타 데이터를 생성하고 가져와요.
NimbusStyle은 컴포넌트별로 설정을 재정의하는 기능도 지원해요. NimbusStyle은 컴포넌트의 클라이언트 속성 맵에서 "Nimbus.Overrides"를 확인해요. 이 키에 연결된 값이 UIDefaults 인스턴스라면 그 defaults 테이블의 값이 UIManager의 표준 Nimbus defaults를 재정의하는데, 해당 컴포넌트 인스턴스에만 적용돼요.
선택적으로 클라이언트 속성 "Nimbus.Overrides.InheritDefaults"를 지정할 수 있어요. true이면 UIManager에 있는 defaults를 먼저 읽은 다음, 컴포넌트 클라이언트 속성에 있는 defaults로 교체한다는 것을 나타내요. false이면 컴포넌트 클라이언트 속성 맵에 있는 defaults만 사용해요. 지정하지 않으면 true로 가정해요. "Nimbus.Overrides.InheritDefaults"가 효과를 가지려면 "Nimbus.Overrides"를 지정해야 해요.
참고: 값은
UIManager에서 한 번만 읽고 캐시돼요. 값을 다시 읽어야 한다면(예: UI가 다시 로드될 때) 해당 메서드에 문서화된 동작을 참조하세요.
본문
NimbusStyle은 Nimbus 룩앤필의 영역별 스타일을 나타내는 SynthStyle 구현이에요. UIDefaults에서 이름 규칙에 따라 필요한 값을 읽고, 상태별(color/font/painter) 값을 조회할 때 폴백(fallback) 검색을 수행해요.
대표적인 시그니처는 다음과 같아요.
public static final String LARGE_KEY
public static final String SMALL_KEY
public static final String MINI_KEY
public static final double LARGE_SCALE
public static final double SMALL_SCALE
public static final double MINI_SCALE
public void installDefaults(SynthContext ctx)
public Insets getInsets(SynthContext ctx, Insets in)
protected Color getColorForState(SynthContext ctx, ColorType type)
protected Font getFontForState(SynthContext ctx)
public SynthPainter getPainter(SynthContext ctx)
public boolean isOpaque(SynthContext ctx)
public Object get(SynthContext ctx, Object key)
public Painter<Object> getBackgroundPainter(SynthContext ctx)
public Painter<Object> getForegroundPainter(SynthContext ctx)
public Painter<Object> getBorderPainter(SynthContext ctx)
주요 메서드의 동작을 살펴볼게요.
installDefaults(SynthContext ctx)—ctx의JComponent에 이 스타일의 필요한 상태를 설치해요. 필요하면 이 스타일이UIDefaults의 데이터로 스스로를 채우도록 재정의돼요.getInsets(SynthContext ctx, Insets in)— 크기 정보를 계산하는 데 사용되는 인셋을 반환해요. 필요하면 스타일이UIDefaults에서 데이터를 채우도록 재정의돼요.getColorForState(SynthContext ctx, ColorType type)— 지정된 상태에 대한 색상을 반환해요.JComponent에 어떤 메서드도 호출하면 안 돼요.ColorType.BACKGROUND는"background"라는 이름의 UIDefaults 색상과,ColorType.TEXT_BACKGROUND는"textBackground",ColorType.FOREGROUND와ColorType.TEXT_FOREGROUND는"textForeground"와 같아요.getFontForState(SynthContext ctx)— 지정된 상태에 대한 폰트를 반환해요."font"라는 이름의 값이 UIDefaults에 없으면"defaultFont"폰트가 반환돼요.getPainter(SynthContext ctx)— 페인팅에 사용될SynthPainter를 반환해요. null을 반환할 수도 있으며, 이 스타일에 설치된 페인터들에 위임하는 결과가 돼요.isOpaque(SynthContext ctx)— 영역이 불투명하면true를 반환해요. UI defaults에 불투명도가 지정되지 않으면 기본적으로 불투명하지 않아요.get(SynthContext ctx, Object key)— 영역별 스타일 속성의 getter예요.UIDefaults의 속성은 체인 방식으로 지정될 수 있어요. 예를 들어Button.opacity,Button.Enabled.foreground,Button.Enabled+Selected.background같은 형식이죠. 상태가 주어졌을 때 가장 구체적인 상태부터 폴백하며 값을 찾아요.getBackgroundPainter(ctx)/getForegroundPainter(ctx)/getBorderPainter(ctx)— 주어진SynthContext의 상태에 대한 배경/전경/테두리Painter를 가져와요.#get에서 설명한 대로 적절한 폴백 검색을 수행해요.
크기 변형 키
LARGE_KEY, SMALL_KEY, MINI_KEY는 각각 큰/작은/미니 크기 변형의 키이며, LARGE_SCALE, SMALL_SCALE, MINI_SCALE은 대응하는 배율을 나타내는 상수예요.