You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:32:08