001-Kotlin界面开发之Jetpack Compose Desktop学习路径
Compose Desktop学习之路

学习过程
理解Kotlin的基本语法
Compose Desktop采用Kotlin构建,因此对Kotlin的基本语法有很好的理解是必不可少的。你可以从官方的Kotlin文档开始。
用一句话概括,Kotlin是一种现代的、静态类型的编程语言,它结合了面向对象和函数式编程的特性。用通俗的话说,Kotlin就是Java的含糖量爆表的全新版本。它非常现代,也非常简洁,同时还保留了Java的一些优点。
学习Kotlin的基本语法,包括变量、函数、类、接口、扩展函数、数据类、枚举类等,是学习Compose Desktop的基础。但是一个Java程序员,应该很快就能掌握Kotlin的基本语法。并且,JetBrains提供了一个非常好的在线Kotlin Playground,你可以在这里练习Kotlin的基本语法。JetBrains的免费Java开发环境IntelliJ IDEA也支持Kotlin,你可以在IntelliJ IDEA中创建一个Kotlin项目,并且支持把Java代码转换为Kotlin代码。
糖度高、身体好,Kotlin是Java程序员的福音。
开发环境搭建
- 安装IntelliJ IDEA:这是Kotlin和Compose Desktop开发的推荐IDE。
- 安装JDK:确保你安装了最新的JDK。
- 创建一个新项目:使用IntelliJ IDEA创建一个带有Compose Desktop支持的Kotlin项目。
这几个步骤就已经完成了Compose Desktop的开发环境搭建。
学习Jetpack Compose的基础知识
Jetpack Compose是Compose Desktop的基础。从官方的Jetpack Compose文档开始,了解核心概念。
这个部分主要包括一些非常基础的概念,如:
- Composable函数的概念
- GUI界面的概念
- Material Design的概念
- 界面布局的概念
- 基本的UI组件,如Button、TextField、Checkbox等
探索多平台Compose
- 官方文档:参考Compose Multiplatform文档.
- 示例项目:在GitHub上探索可用的示例项目,看看Compose Desktop在实际应用中是如何使用的。
Compose Desktop应用示例
首先,我们来看一个最简单的Compose Desktop应用示例。这个示例展示了如何创建一个简单的窗口,并在窗口中显示一段文本。
import androidx.compose.desktop.ui.tooling.preview.Preview
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import java.awt.Dimension@Composable
@Preview
fun App() {MaterialTheme {Box(modifier = Modifier.fillMaxSize(),contentAlignment = Alignment.Center) {Text("您好, Compose Desktop!", style = MaterialTheme.typography.h3)}}
}fun main() = application {Window(onCloseRequest = ::exitApplication,title = "Compose Desktop Demo 000") {App()}
}
这个代码,跟JavaFx的实际上比较类似,JavaFx中的容器、布局类、空间类,在Compose Desktop中都有对应的概念,只是Compose Desktop采用可组合函数的方式来实现。
而在编译这个代码之前,最好先把Gradle的下载地址换个国内的镜像,就在gradle/wrapper/gradle-wrapper.properties文件中,把distributionUrl的地址换成国内的镜像地址,比如https\://services.gradle.org/distributions/gradle-8.7-bin.zip,更换为distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip。这样下载速度会快很多。
另外就是在build.gradle.kts文件中,添加国内的maven仓库地址,如下:
repositories {maven(url = "https://maven.aliyun.com/repository/public")mavenCentral()
}
当然,在你的settings.gradle.kts中同样需要增加maven("https://maven.aliyun.com/repository/public/")。
pluginManagement {repositories {maven("https://maven.aliyun.com/repository/public/")maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")google()gradlePluginPortal()mavenCentral()}plugins {kotlin("jvm").version(extra["kotlin.version"] as String)id("org.jetbrains.compose").version(extra["compose.version"] as String)id("org.jetbrains.kotlin.plugin.compose").version(extra["kotlin.version"] as String)}
}
就算是都加上了,IDEA还是要卡一会,因为傻瓜的IDEA也要从遥远的地方下载kotlin那一套。
这两个步骤完成之后,就可以编译这个Compose Desktop应用程序了。

可以调用gradle run命令来运行这个应用程序。
还能用gradle createRuntimeImage命令来创建一个可执行文件,这个可执行文件可以在没有安装JDK的机器上运行。
大概在build/compose/binaries/app/Demo000目录下,有一个可执行文件,双击这个文件就可以运行这个应用程序。整个目录大概170MB左右。当然,这都不重要……
理解状态管理
学会如何在Compose Desktop中管理状态。这对于构建交互式应用程序至关重要。这个地方实际上是Compose Desktop的核心,也是最难的地方。
Compose Desktop的核心思想是函数式编程,状态管理是函数式编程的核心。Compose Desktop提供了一些函数来帮助我们管理状态,如remember和mutableStateOf。这些函数可以帮助我们在Compose Desktop中管理状态,使得我们的应用程序更加健壮和易于维护。
探索布局和修饰符
布局是一切GUI设计的中心工作之一。
理解不同的布局组合(Box、Column、Row等)以及如何使用Modifier来设计和定位UI元素,是构造Compose Desktop应用程序的主要工作内容。
用户输入的处理
学会如何使用Button、TextField和Checkbox等组合来处理用户输入。
一方面要掌握工具,也就是具体的用于处理用户输入的组合函数,另一方面也要仔细学习不同组件的实际用途,跟需求分析结合在一起。
列表
显示数量不定的数据是GUI设计的常见需求。Compose Desktop提供了LazyColumn和LazyRow等组合函数来处理这种情况。
高级主题
- 自定义绘图:学会如何使用
Canvas组合来创建自定义绘图。 - 动画:探索如何为Compose Desktop应用程序添加动画。
- 互操作性:了解如何与现有的Swing应用程序进行互操作。
测试
学会为Compose Desktop应用程序编写测试,以确保它按预期工作。
Compose Desktop提供了一些测试工具,如ComposeTestRule和onNode,可以帮助我们编写测试。这些工具可以帮助我们确保我们的应用程序按预期工作,同时也可以帮助我们快速定位和修复问题。
应用部署
学会如何使用compose.desktop.application插件打包和分发Compose Desktop应用程序。
总结
Compose Desktop是一个非常强大的桌面应用程序框架,它提供了一种现代、简洁、易于使用的方式来构建桌面应用程序。学习Compose Desktop需要掌握Kotlin的基本语法、Jetpack Compose的基础知识、状态管理、布局和修饰符、用户输入的处理、列表、高级主题、测试和应用部署等内容。
通过上面的学习过程,就有可能获得对Compose Desktop较深入的理解,并能够构建自己的桌面应用程序。
那么,就让我们开始这段……感情……哦不……旅程吧……
相关文章:
001-Kotlin界面开发之Jetpack Compose Desktop学习路径
Compose Desktop学习之路 学习过程 理解Kotlin的基本语法 Compose Desktop采用Kotlin构建,因此对Kotlin的基本语法有很好的理解是必不可少的。你可以从官方的Kotlin文档开始。 用一句话概括,Kotlin是一种现代的、静态类型的编程语言,它结合…...
qt QStackedLayout详解
QStackedLayout类提供了一种布局方式,使得在同一时间内只有一个子部件(或称为页面)是可见的。这些子部件被维护在一个堆栈中,用户可以通过切换来显示不同的子部件,适合用在需要动态显示不同界面的场景,如向…...
python实现钉钉群机器人消息通知(消息卡片)
直接上代码 python """ 飞书群机器人发送通知 """ import time import urllib3 import datetimeurllib3.disable_warnings()class DingTalkRobotAlert():def __init__(self):self.webhook webhook_urlself.headers {Content-Type: applicatio…...
防火墙技术应用
目录 防火墙安全功能指标防火墙性能指标防火墙部署防火墙应用案例-Linux防火墙防火墙应用案例-华为包过滤防火墙ACL(基本)防火墙应用案例-工控防火墙部署 防火墙安全功能指标 我们防火墙也会提供各种各样的互联接口,它这种接口有以太网、快速以太网、千兆以太网&am…...
docker engine stopped
1)环境:win 10 2)docker安装时已经已经安装了虚拟机 3)启用网络适配器 4)启用docker服务(依赖服务LanmanServer) 5)全都弄好了,docker还是打不开,没办法了&a…...
Redis- 内核的分配内存限制的警告“WARNING Memory overcommit must be enabled!”
文章目录 问题描述报错原因影响解决方案注意事项 问题描述 [rootredisxxx]# redis-sentinel ./sentinel.conf 19638:X 01 Nov 2024 16:57:27.180 # WARNING Memory overcommit must be enabled! Without it, background save or replication may fail under low memory condi…...
腾讯云在线扩容数据盘
文章目录 一、查询云硬盘使用的分区形式二、根据不同的云硬盘类型进行在线扩容分区2.1 安装 gdisk 工具。2.2 安装 growpart 工具使用 growpart 工具扩容分区 三、根据不同的云硬盘类型进行在线扩容文件系统3.1 扩容 EXT 文件系统3.2 扩容 XFS 文件系统 一、查询云硬盘使用的分…...
Time Travel Queries|在 RisingWave 中访问历史数据
对于许多组织来说,能够访问历史数据十分关键。以金融交易公司为例: 特定时间点的数据快照与合规审查、审计流程息息相关。企业的关键业务系统也依赖历史数据来恢复故障并重建系统。分析过去事件及其对当前状况的影响,还有助于准确预测并制定…...
Unity之UnityWebRequest
复习UnityWebRequest 介绍下载文件和上传文件下载进度和异常验证文件DownloadHandlerScript 介绍 unity中使用UnityWebRequest来代替所有HTTP请求提供了三种API,UnityWebRequest.Get,UnityWebRequest.Post,UnityWebRequest.Put分别处理GET,POST,PUT请求…...
使用 pkg 打包 Puppeteer 应用:跨平台自动化的轻量级选择
使用 pkg 打包 Puppeteer 应用 pkg 是一个非常强大的工具,它允许你将 Node.js 项目打包成独立的可执行文件,这意味着你可以在没有安装 Node.js 环境的设备上运行该应用。这对于希望分发不暴露源代码的应用程序、创建跨平台的快速演示版本或简化部署流程…...
【Flask】三、Flask 常见项目架构
目录 前言 简单项目结构 中型项目结构 复杂项目结构 前言 Flask是一个轻量级的Web应用框架,它被广泛用于快速开发简单的网站和复杂的大型应用。随着项目规模的增长,合理的项目架构变得尤为重要。这里探讨Flask项目中的三种常见架构&…...
AI机西使用体验:你不知道的强大功能揭秘!
AI机西有人用过吗?用户体验和功能详解 最近我听说了很多关于AI机西的讨论,很多人都在问:这款工具好用吗?有没有人用过?今天我就从我的使用体验出发,给大家分享一下AI机西的功能和我的感受。 1. 绘画功能&a…...
什么是护网(HVV)需要什么技术?(内附护网超全资料包)
文章目录 一、什么是护网行动?二、护网分类三、护网的时间四、护网的影响五、护网的规则六、什么是红队? 6.1、红队测试的意义 七、什么是蓝队 一、什么是护网行动? 护网行动是以公安部牵头的,用以评估企事业单位的网络安全的…...
opencv优秀文章集合
文章目录 一、 CV领域1.1 图像处理1.2 目标检测与识别1.3 图像分割、目标追踪1.4 姿态估计1.5 3D视觉1.6 图像生成1.7 机器视觉1.8 其它 二、 nlp三、语音四、推荐系统 《OpenCV优秀文章集合》《OpenCV系列课程一:图像处理入门(读写、拆分合并、变换、注…...
php处理文件上传的五种方式
dd($_FILES); //方式一 if(!empty($_FILES[file])){ //获取文件后缀方式一 //strrchr()函数查找字符在指定字符串中从右面开始的第一次出现的位置, //如果成功,返回该字符以及其后面的字符…...
C#与C++交互开发系列(十一):委托和函数指针传递
前言 在C#与C的互操作中,委托(delegate)和函数指针的传递是一个复杂但非常强大的功能。这可以实现从C回调C#方法,或者在C#中调用C函数指针的能力。无论是跨语言调用回调函数,还是在多线程、异步任务中使用委托&#x…...
【window】补充一些powershell基本命令
刚才说了一下如何用powershell管理,下边是一些常见的 PowerShell 命令及其参数的示例,补充给大家: 1. 获取帮助 Get-Help:获取命令的帮助信息。 Get-Help Get-Process Get-Help Get-Process -Examples Get-Help Get-Process -Fu…...
精准触达用户,私域三步法!
发现没?现在很多人都开始利用私域来增加潜在的客户,维护现有客户。而在私域管理中,精准触达用户是非常重要的一环。 接下来,就和大家聊聊私域精准触达用户的三个方法,让你可以实现精准营销。 1、数据分析与用户画像构…...
Tcl脚本介绍(一)
芯冰乐知识星球入口:芯冰乐 TCL就是Tool Command Language的简称,广泛应用在各大eda工具中。 EDA工具能够高度自动化的运行得益于TCL。 用户在编写完相关的tcl脚本后,让eda工具自动运行,便能够很大程度地解放双手了。 其实,网络上介绍TCL脚本的课程层出不穷了。应很多粉…...
安全运营 -- 监控linux命令history
0x00 背景 最近,有个IT的同事给我提了一个需求,说想监控/root/.ssh/ 文件夹下的文件变动,于是我灵机一动,这个需求只要对执行过的历史命令做审计就可以了。 0x01 实践 我实现这个功能使用 rsyslog 和 firewalld 两个组件。 我的…...
CANN/cann-bench MHA算子API描述
MHA 算子 API 描述 【免费下载链接】cann-bench 评测AI在处理CANN领域代码任务的能力,涵盖算子生成、算子优化等领域,支撑模型选型、训练效果评估,统一量化评估标准,识别Agent能力短板,构建CANN领域评测平台࿰…...
屏蔽壳设计全解:材料选型、接地策略与EMC实战优化
摘要: 在高速数字电路、射频模块及工业通信设备中,电磁干扰(EMI/EMC)往往是产品认证路上的“拦路虎”。屏蔽壳(电磁屏蔽罩)作为抑制辐射骚扰最直接的手段,其材料选择、开孔尺寸、接地方式及结构…...
Fast-GitHub:智能网络优化架构解析与分布式加速方案
Fast-GitHub:智能网络优化架构解析与分布式加速方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 在国内开发者面临G…...
从“能上传”到“可信可用”:如何用 Python 设计一个安全、可靠、可扩展的文件上传服务?
从“能上传”到“可信可用”:如何用 Python 设计一个安全、可靠、可扩展的文件上传服务? 文件上传服务看似简单:用户点一下按钮,文件传到服务器,返回一个 URL。可真正进入生产环境后,你会发现它不是一个“保…...
告别键盘连击烦恼:KeyboardChatterBlocker 智能解决方案详解
告别键盘连击烦恼:KeyboardChatterBlocker 智能解决方案详解 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经在打…...
Win10混合现实模拟器初体验:除了测试,还能怎么玩?
Win10混合现实模拟器:从测试工具到创意游乐场的5种玩法 当你第一次打开Win10混合现实模拟器,看到那个漂浮的手柄模型和空荡荡的虚拟空间时,是否也产生过"就这?"的疑问?这个被多数教程简单带过的内置工具&…...
如何在5分钟内制作专业滚动歌词?LRC Maker免费在线工具终极指南
如何在5分钟内制作专业滚动歌词?LRC Maker免费在线工具终极指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 你是否曾为制作歌词时间轴而烦恼&#x…...
Geothermal Power Generation Global Market Trends 2026:地热发电为何正在成为新一轮能源工程竞争核心
观点|地热发电的竞争逻辑已经发生变化过去很多人认为地热发电属于区域性能源项目。但现在,行业真正变化的是:地热正在从“资源开发工程”,转向“稳定电力基础设施工程”。相比波动性较强的风电与光伏,地热发电最大的优…...
SAP查询字段定义的字符数
用户常会问到“***的文本描述可以输入多少个字符”。 操作步骤: 输入事物代码:SE11就能看到字段配置的字符数量。如何获得表名称:(OBB8举例) 操作步骤: 输入事物代码:OBB8...
多平台矩阵账号防关联技术深度解析:2026年IP隔离与设备指纹的攻防战
一、问题背景:矩阵运营最大的风险不是限流,是封号做矩阵的人都知道一个残酷的事实:你不是被限流死的,你是被关联死的。2025年某MCN机构一次封号事件:32个抖音账号、18个小红书账号、7个视频号账号,一夜之间…...
