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

如何在Jetpack Compose Desktop中程序化最小化/最大化窗口?

如何在Jetpack Compose Desktop中编程实现窗口最小化与最大化操作?

完全可以实现,核心是利用Compose Desktop WindowScope 中提供的window实例,调用其内置的窗口控制方法即可。

以下是完整的实现代码,包含最小化、最大化/恢复功能:

import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import androidx.compose.ui.window.exitApplication

fun main() {
    application {
        Window(
            title = "My Application",
            focusable = true,
            onCloseRequest = { exitApplication() }
        ) {
            MaterialTheme {
                // 记录窗口最大化状态,用于切换按钮文本
                var isMaximized by remember { mutableStateOf(window.isMaximized) }

                // 最小化按钮
                Button(onClick = { window.minimize() }) {
                    Text("最小化")
                }

                // 最大化/恢复切换按钮
                Button(onClick = {
                    if (isMaximized) {
                        window.restore()
                    } else {
                        window.maximize()
                    }
                    isMaximized = window.isMaximized
                }) {
                    Text(if (isMaximized) "恢复" else "最大化")
                }
            }
        }
    }
}

关键说明:

  • 获取窗口实例:在Window的内容lambda中(自动处于WindowScope),直接通过window变量访问当前窗口对象。
  • 窗口控制方法:
    • 调用window.minimize()可将窗口最小化到任务栏。
    • 调用window.maximize()可将窗口铺满屏幕。
    • 调用window.restore()可将最大化的窗口恢复到之前的尺寸和位置。
  • 状态同步:使用window.isMaximized属性判断当前窗口状态,配合remember和mutableStateOf实现按钮文本的动态更新,确保UI与窗口状态一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:00:05