창 장식에 대한 숙고

4655 단어 uxkotlinjava
내 이전 기사를 읽었다면 내가 데스크톱 앱용 Compose에 다크 모드를 도입하는 임무를 수행 중이라는 것을 알고 계실 것입니다. 이전 에피소드에서 빠진 것은
  • 창 테두리 색상
  • 메뉴 표시줄

  • 이번 회에서는 Windows에 중점을 둘 것입니다.

    창 장식의 색상을 변경할 수 있는 방법을 이해하려면 Compose for Desktop이 어느 정도 Swing 구성 요소에 의존한다는 점을 기억해야 합니다. Swing은 플러그형 모양과 느낌의 개념을 기반으로 합니다. 모양과 느낌은 Swing 구성 요소의 모양과 작동 방식을 담당합니다. AWT가 네이티브 UI 구성 요소에 의존하는 반면 Swing은 모든 페인팅을 수행합니다. 일반적으로 이것은 UI로 끝나는 클래스에 의해 수행됩니다. 창 장식이 시스템에서 제공될 수 있지만 모양과 느낌이 자체적으로 칠할 수 있다는 것이 중요합니다.

    클라이언트 코드는 이를 요청할 수 있습니다(가능한 한 빨리, 이상적으로는 main() )

    JFrame.setDefaultLookAndFeelDecorated(true)
    


    또한 다음과 같이 작성 창을 만들어야 합니다.

    AppWindow(
        undecorated = true,
    


    그리고 여기에 일부 색상을 변경하는 코드가 있습니다. 내 TKDupeFinder app 의 일부입니다.

    val window = AppManager.windows.first().window
    getDefaults()["activeCaption"] =
        ColorUIResource(colors.background.toArgb())
    getDefaults()["activeCaptionText"] =
        ColorUIResource(colors.primary.toArgb())
    window.rootPane.windowDecorationStyle = JRootPane.FRAME
    UIManager.setLookAndFeel(
               UIManager.getCrossPlatformLookAndFeelClassName())
    SwingUtilities.updateComponentTreeUI(window.rootPane)
    


    그러면 앱이 다음과 같이 표시됩니다.



    내가 왜 의도적으로 getCrossPlatformLookAndFeelClassName() 대신 getSystemLookAndFeelClassName 를 사용하는지 스스로에게 묻고 계실 것입니다.

    후자는 작동하지 않습니다. Windows 및 macOS Look and Feels는 사용자 지정 창 장식을 지원하지 않습니다. 다음과 같이 확인할 수 있습니다.

    println(UIManager.getLookAndFeel().supportsWindowDecorations)
    


    따라서 창 장식의 색상을 변경하려면 교차 플랫폼 모양과 느낌을 사용하거나 창 장식을 지원하는 다른 모양과 느낌을 사용해야 합니다. 향후 게시물에서 일부를 살펴볼 수 있습니다. 이 기사를 마치기 전에 아마도 여러분이 가질 수 있는 또 다른 질문에 답하겠습니다. 컴포저블에서 모양과 느낌을 설정한 이유는 무엇입니까? 되도록 일찍 설정하는 것이 좋지 않을까요?

    현재 Compose for Desktop은 예를 들어 androidx.compose.ui.window.MenuBar에서와 같이 초기화 시 의도적으로 시스템 모양과 느낌을 설정합니다.


    Library.load()는 다음과 같은 miscSystemInit()를 호출합니다.



    그렇다면 이것은 무엇을 의미합니까? 이상적으로 데스크톱용 Compose는 컴포저블에 의존하지 않는 앱 부분에 사용해야 하는 모양과 느낌을 지정하는 수단을 제공합니다. 또는 머티리얼 디자인 스타일을 선택하는 고유한 모양과 느낌을 가져올 수 있습니다. 이렇게 하면 데스크톱용 Compose 앱이 훨씬 더 아름답게 보입니다.

    좋은 웹페이지 즐겨찾기