스윙 테마: MaterialTheme 시스템에 대한 기본 소개

2019년부터 material-ui-swing에는 MaterialTheming이라는 실험적 기능이 있습니다. 특히 MaterialTheming은 Flutter나 Jetpack Compose에서 구현된 재료 테마 시스템처럼 Swing 내부에 선언적 테마 시스템을 추가하자는 제안입니다.



Material-UI-Swing 소개



Material-UI-Swing은 원래 Swing API가 있는 Swing과 같은 아주 오래된 프레임워크 내에서 재료 스타일을 가져올 수 있는 가능성을 제공하는 라이브러리입니다. 라이브러리는 원래 atharva washimkar에 의해 대학 프로젝트로 탄생했으며 vincenzopalazzo에 의해 제품으로 변형되었습니다.

또한 원래 프로젝트는 vincenzopalazzo가 자신의 저장소에서 몇 가지 실험을 구현하기 시작했기 때문에 포크되었습니다. 그 후 저장소https://github.com/vincenzopalazzo/material-ui-swing가 유지 관리되는 유일한 저장소였지만 주기적으로 atharw의 수신 동기화가 마지막 업데이트와 동기화되었습니다.

2018년 원 메인테이너가 메인테이너로 프로젝트를 떠나고 2018년 빈센조팔라쪼의 새로운 메인테이너가 시작되어 지금까지 라이브러리의 범위 개발이 제품으로 성장하기 시작합니다. 이는 세계에서 가장 인기 있는 Swing 소프트웨어 중 하나인 JMars와 라이브러리를 통합하는 동안 Arizona State University의 지원 덕분에 가능했습니다.

라이브러리 개발은 최종 개발자가 라이브러리 내부에 구축된 표준 팔레트를 사용하지 않고 사용자가 원하는 모든 유형의 스타일을 구현할 수 있는 빌딩 블록을 제공하는 일부 솔루션을 실험하는 데 중점을 두었습니다.

이로 인해 아래에 설명된 두 가지 문제가 발생합니다.
  • 코너 케이스가 많이 포함될 수 있기 때문에 사용자 설정으로 변경할 수 있는 동적 구성 요소를 구현하는 것이 어려울 수 있습니다.
  • Swing 프레임워크에는 내부에 테마(색상뿐만 아니라 스타일 의미의 테마)에 대한 쉬운 개념이 없지만 한 구성 요소의 스타일도 변경할 수 있습니다.

  • MaterialTheming 시스템 소개



    Material Theming 시스템은 MaterialTheme 인터페이스 아래 라이브러리의 지속적인 빌드를 제공하며 이 개념을 통해 UI material-ui-swing이 지원할 수 있는 UI material-ui-swing을 빌드하고 스타일링하는 모든 값에 대한 액세스를 제공하는 인터페이스를 갖습니다. 애플리케이션의 스타일만 포함하는 별도의 jar로 제공되는 외부 테마.

    외부 테마의 한 가지 예는 DarkStackOverflowTheme 이며 이는 UI 도구 내부에 있어야 하는 중요한 기능입니다.

    대조적으로 MaterialTheme 인터페이스는 개선될 수 있으며 파일 적합성 또는 JSON 등에 따라 다양한 구성 형식을 허용할 수 있습니다.

    이는 사용자가 Intellij 테마 또는 다른 테마와 같은 외부 리소스에서 일부 테마를 가져오려는 경우에 특히 강력합니다.

    사용 예



    테마 변경은 매우 쉽고 리포지토리 내에서 변경할 필요가 없습니다. 정적 블록 내부에 다음 코드를 포함할 수 있습니다.

    static {
        try {
          // UIManager.setLookAndFeel(new MaterialLookAndFeel(new MaterialLiteTheme()));
    // by including the https://github.com/material-ui-swing/DarkStackOverflowTheme
         UIManager.setLookAndFeel(new MaterialLookAndFeel(new DarkStackOverflowTheme())); mouse hover
        } catch (UnsupportedLookAndFeelException e) {
          e.printStackTrace();
        }
    


    결론



    몇 년 후 저는 사용자 지정 테마를 구현하기 위해 material-ui-swing에서 시작한 실험을 공유하고 Swing 애플리케이션을 현대화하기 위해 대체 라이브러리를 구현하기 시작했습니다.

    내 작업이 마음에 든다면 Github sponsor page에서 나를 후원하고 Github @vincenzopalazzo에서 나를 팔로우하세요.

    좋은 웹페이지 즐겨찾기