MetalLookAndFeel

MetalLookAndFeel

The Java Look and Feel, 다른 이름으로는 Metal이라고 불러요. MetalLookAndFeel이 제공하는 각 ComponentUI는 defaults 테이블에서 동작을 가져와요. 별도로 명시하지 않는 한 이 패키지의 각 ComponentUI 구현은 사용하는 defaults의 집합을 문서로 설명해요. 별도로 명시하지 않는 한 defaults는 installUI가 호출되는 시점에 설치되며, LookAndFeel에서 defaults 설치에 대해 설명된 권장 사항을 따르죠.

MetalLookAndFeel은 색상 팔레트와 폰트를 MetalTheme에서 가져와요. 기본 테마는 OceanTheme이에요. 테마는 setCurrentTheme 메서드를 사용해 바꿀 수 있으며, 테마 변경에 대한 자세한 내용은 이 메서드를 참조하세요. 1.5 이전에는 기본 테마가 DefaultMetalTheme이었어요. 시스템 속성 "swing.metalTheme""steel"로 설정하면 기본값이 DefaultMetalTheme이 되어야 한다는 것을 나타낼 수 있어요.

경고: 이 클래스의 직렬화된 객체는 향후 Swing 릴리스와 호환되지 않을 거예요. 현재 직렬화 지원은 같은 버전의 Swing을 실행하는 애플리케이션 간의 단기 저장 또는 RMI에 적절해요. 1.4부터 모든 JavaBean의 장기 저장 지원이 java.beans 패키지에 추가되었어요. XMLEncoder를 참조하세요.

출처: Java API Reference

본문

MetalLookAndFeel은 Java 플랫폼의 기본 Look and Feel로 알려진 전통적인 메탈 테마를 구현하는 클래스예요. 이 인스턴스가 사용하는 모든 색상과 폰트는 현재 MetalTheme에서 비롯되며, 이 테마는 setCurrentTheme(MetalTheme) 정적 메서드를 통해 런타임에 바꿀 수 있어요.

대표적인 시그니처는 다음과 같아요.

public MetalLookAndFeel()
public String getName()
public String getID()
public String getDescription()
public boolean isNativeLookAndFeel()
public boolean isSupportedLookAndFeel()
public boolean getSupportsWindowDecorations()
protected void initClassDefaults(UIDefaults table)
protected void initSystemColorDefaults(UIDefaults table)
protected void initComponentDefaults(UIDefaults table)
protected void createDefaultTheme()
public UIDefaults getDefaults()
public void provideErrorFeedback(Component component)
public static void setCurrentTheme(MetalTheme theme)
public static MetalTheme getCurrentTheme()
public Icon getDisabledIcon(JComponent component, Icon icon)
public Icon getDisabledSelectedIcon(JComponent component, Icon icon)
public static FontUIResource getControlTextFont()
public static FontUIResource getSystemTextFont()
public static FontUIResource getUserTextFont()
public static FontUIResource getMenuTextFont()
public static FontUIResource getWindowTitleFont()
public static FontUIResource getSubTextFont()

주요 메서드의 동작을 살펴볼게요.

  • getName() — 이 Look and Feel의 이름을 반환해요. "Metal"을 반환하죠.
  • getID() — 이 Look and Feel를 식별하는 문자열을 반환해요. "Metal"을 반환해요.
  • getDescription() — 이 Look and Feel에 대한 짧은 설명을 반환해요. "The Java(tm) Look and Feel"을 반환하죠.
  • isNativeLookAndFeel()false를 반환해요. MetalLookAndFeel은 네이티브 Look and Feel가 아니에요.
  • isSupportedLookAndFeel()true를 반환해요. MetalLookAndFeel은 어떤 플랫폼에서도 실행될 수 있어요.
  • getSupportsWindowDecorations()true를 반환해요. Metal은 창 장식(Window decoration)을 제공할 수 있어요.
  • getDefaults() — Look and Feel defaults를 반환해요. 내부적으로 createDefaultTheme(), super.getDefaults(), getCurrentTheme().addCustomEntriesToTable(table)을 순서대로 호출해요.

테마 관련 정적 팩토리

initClassDefaults(UIDefaults table)uiClassID에서 UI 클래스의 정규화된 이름으로의 매핑으로 테이블을 채워요. MetalLookAndFeel은 javax.swing.plaf.metal 패키지에 있는 MetalXXXUI라는 이름의 각 클래스에 대해 항목을 등록해요. 예를 들어 Metal에는 "MetalColorChooserUI"라는 클래스가 없으므로 javax.swing.plaf.basic.BasicColorChooserUI가 사용돼요.

initSystemColorDefaults(UIDefaults table)은 시스템 색상 테이블을 채워요. "desktop", "activeCaption", "text", "control", "menu" 등 다양한 시스템 색상 키가 현재 테마의 대응하는 값에 매핑돼요.

테마 변경

setCurrentTheme(MetalTheme theme)을 사용하면 MetalLookAndFeel이 사용하는 테마를 설정할 수 있어요. 테마를 설정한 뒤에는 MetalLookAndFeel을 다시 설치하고 UI를 다시 만들어야 해요. 방법은 다음과 같아요.

MetalLookAndFeel.setCurrentTheme(theme);
UIManager.setLookAndFeel(new MetalLookAndFeel());
SwingUtilities.updateComponentTreeUI(rootComponent);

이 작업을 수행하지 않으면 결과가 정의되지 않아요.

getCurrentTheme()은 현재 사용 중인 테마를 반환해요. 현재 테마가 null이면 기본 테마가 생성돼요.

색상 getter

이 클래스는 현재 테마의 각 색상과 폰트를 반환하는 다수의 정적 getter 메서드를 제공해요. 예를 들어 getControl(), getControlShadow(), getPrimaryControl() 등이 있으며, 각 메서드는 getCurrentTheme()의 대응 메서드를 호출하는 커버 메서드예요.

더 알아보기