NimbusLookAndFeel
NimbusLookAndFeel
NimbusLookAndFeel 클래스예요.
본문
NimbusLookAndFeel은 Swing의 님버스(Nimbus) Look and Feel 클래스예요. 컴포넌트와 영역에 대한 스타일을 SynthStyleFactory 기반으로 가져오며, 서드파티 컴포넌트를 등록하는 기능을 제공해요.
대표적인 시그니처는 다음과 같아요.
public NimbusLookAndFeel()
public void initialize()
public void uninitialize()
public static NimbusStyle getStyle(JComponent c, Region r)
public String getName()
public String getID()
public String getDescription()
public boolean shouldUpdateStyleOnAncestorChanged()
protected boolean shouldUpdateStyleOnEvent(PropertyChangeEvent ev)
public void register(Region region, String prefix)
public Color getDerivedColor(String uiDefaultParentName, float hOffset, float sOffset, float bOffset, int aOffset, boolean uiResource)
protected final Color getDerivedColor(Color color1, Color color2, float midPoint, boolean uiResource)
protected final Color getDerivedColor(Color color1, Color color2, float midPoint)
주요 메서드의 동작을 살펴볼게요.
initialize()—UIManager가 이 Look and Feel를 설치할 때 호출해요.uninitialize()—UIManager가 이 Look and Feel를 제거할 때 호출해요.getStyle(JComponent c, Region r)— 주어진 컴포넌트와 영역에 연결된 스타일을 가져와요. 이 메서드는 절대 null을 반환하지 않아요. 적절한 컴포넌트와 영역을 결정할 수 없으면 기본 스타일을 반환해요.getName()— 이 Look and Feel를 식별하는 짧은 문자열을 반환해요. 따옴표 없는 문자열"Nimbus"예요.getID()— 이 Look and Feel를 식별하는 문자열을 반환해요. 따옴표 없는 문자열"Nimbus"예요.getDescription()— 이 Look and Feel에 대한 텍스트 설명을 반환해요.shouldUpdateStyleOnAncestorChanged()—JComponent의 조상이 바뀔 때 UI가SynthStyleFactory에서SynthStyle을 업데이트해야 하는지 여부를 반환해요.getStyle의 반환 값을 포함 계층(containment hierarchy)에 기반하는SynthStyleFactory를 제공한 하위 클래스는 이 메서드를 재정의해true를 반환해야 해요.shouldUpdateStyleOnEvent(PropertyChangeEvent ev)— 특정 이벤트가 발생할 때 UI가 스타일을 업데이트해야 하는지 여부를 반환해요."Nimbus.Overrides","Nimbus.Overrides.InheritDefaults","JComponent.sizeVariant"속성 중 하나가 변경되면true를 반환하도록 재정의돼요.register(Region region, String prefix)— 서드파티 컴포넌트를NimbusLookAndFeel에 등록해요. 영역은 컴포넌트와 컴포넌트 내부의 독립적인 페인팅 영역을 나타내요. 등록된 후에는getStyle메서드로 이 영역들의NimbusStyle을 가져올 수 있어요.
등록 예시
register 메서드로 JFoo라는 컴포넌트를 등록한 뒤 다음과 같이 UIDefaults에 속성을 등록할 수 있어요.
laf.register(NimbusFooUI.FOO_REGION, "Foo");
UIManager.put("Foo.background", new ColorUIResource(Color.BLACK));
UIManager.put("Foo.Enabled.backgroundPainter", new FooBackgroundPainter());
컴포넌트에 이름을 붙여 등록할 수도 있어요. 예를 들어 "MyPanel"이라는 이름의 JPanel 배경을 다른 패널과 다르게 스타일링하려면 이렇게 해요.
laf.register(Region.PANEL, "\"MyPanel\"");
UIManager.put("\"MyPanel\".background", new ColorUIResource(Color.RED));
파생 색상
getDerivedColor(String uiDefaultParentName, ...)— 파생 색상을 가져와요. 파생 색상은 공유 인스턴스이며, 부모 UIDefault 색상이 바뀌면 색상 값도 바뀌어요.getDerivedColor(Color color1, Color color2, float midPoint, ...)— 두 색상 사이의 오프셋에서 파생된 색상을 디코딩해 반환해요.