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

Compose Desktop动态修改Window启用状态不生效,是否为预期行为?

Jewel库DecoratedWindow的enabled参数动态更新问题解答

这不是预期行为,属于Jewel库中Window/DecoratedWindow组件的已知缺陷:组件仅在初始化阶段读取enabled参数的值,后续Composable重组时不会监听该参数的变更,导致窗口状态无法随参数动态更新。

问题原因

  • 无论是直接将enabled传入DecoratedWindow的参数,还是手动调用window.isEnabled = enabled,由于组件内部没有绑定该参数的状态监听逻辑,上游重组带来的参数变化不会触发窗口状态的同步更新。
  • 只有组件首次初始化时的enabled值会生效,后续参数变更完全被忽略。

临时解决方案

可以通过LaunchedEffect监听enabled参数的变化,在参数更新时强制同步窗口状态:

class DecoratedWindowImpl : DecoratedWindowInterface {
    @Composable
    override fun Create(
        state: WindowState,
        enabled: Boolean,
        onCloseRequest: () -> Unit,
        content: @Composable DecoratedWindowScope.() -> Unit,
    ) {
        DecoratedWindow(
            state = state,
            enabled = enabled,
            onCloseRequest = onCloseRequest,
        ) {
            // 监听enabled参数变更,动态更新窗口启用状态
            LaunchedEffect(enabled) {
                window.isEnabled = enabled
            }
            content()
        }
    }
}

另外,也可以向Jewel库官方提交Issue,反馈组件缺少enabled参数的重组响应逻辑,推动官方从底层修复该问题。

内容的提问来源于stack exchange,提问作者abarraford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:54:53