창 장식에 대한 숙고
이번 회에서는 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 앱이 훨씬 더 아름답게 보입니다.
Reference
이 문제에 관하여(창 장식에 대한 숙고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tkuenneth/musings-about-window-decorations-2fe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)