如何在Compose Multiplatform中编程调整已创建桌面窗口的大小?
如何在Compose Multiplatform桌面窗口创建后调整大小?
你当前的写法不符合Compose的状态更新机制,导致窗口大小修改无效,以下是两种可行的解决方案:
方案一:窗口初始化后自动调整大小
利用LaunchedEffect在组件首次组合完成后异步修改windowState,触发窗口重组更新大小:
fun main() = application { val windowState = rememberWindowState() Window( onCloseRequest = ::exitApplication, state = windowState ) { LaunchedEffect(Unit) { windowState.size = DpSize(1000.dp, 1000.dp) } } }
LaunchedEffect以Unit为key,确保只在窗口创建完成后执行一次,修改windowState会自动同步到窗口的实际大小。
方案二:通过交互动态调整大小
如果需要在用户操作(比如点击按钮)时调整窗口,可以结合mutableStateOf和LaunchedEffect实现:
fun main() = application { val windowState = rememberWindowState() var triggerResize by remember { mutableStateOf(false) } Window( onCloseRequest = ::exitApplication, state = windowState ) { Button(onClick = { triggerResize = true }) { Text("调整到800×600") } LaunchedEffect(triggerResize) { if (triggerResize) { windowState.size = DpSize(800.dp, 600.dp) triggerResize = false // 重置状态避免重复执行 } } } }
额外说明:使用AWT API的方式
如果一定要直接操作AWT的window.size,需要确保在AWT事件线程执行,否则不会生效:
LaunchedEffect(Unit) { java.awt.EventQueue.invokeLater { window.size = java.awt.Dimension(1000, 1000) } }
但更推荐使用Compose官方的windowState,它和Compose状态系统深度绑定,更适配跨平台开发模式。
内容的提问来源于stack exchange,提问作者CptBlacksheep
相关产品推荐
相关产品推荐

