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()
}

这两个步骤完成之后,就可以编译这个Compose Desktop应用程序了。

在这里插入图片描述

可以调用gradle run命令来运行这个应用程序。

还能用gradle createRuntimeImage命令来创建一个可执行文件,这个可执行文件可以在没有安装JDK的机器上运行。

大概在build/compose/binaries/app/Demo000目录下,有一个可执行文件,双击这个文件就可以运行这个应用程序。整个目录大概170MB左右。当然,这都不重要……

理解状态管理

学会如何在Compose Desktop中管理状态。这对于构建交互式应用程序至关重要。这个地方实际上是Compose Desktop的核心,也是最难的地方。

Compose Desktop的核心思想是函数式编程,状态管理是函数式编程的核心。Compose Desktop提供了一些函数来帮助我们管理状态,如remembermutableStateOf。这些函数可以帮助我们在Compose Desktop中管理状态,使得我们的应用程序更加健壮和易于维护。

探索布局和修饰符

布局是一切GUI设计的中心工作之一。

理解不同的布局组合(BoxColumnRow等)以及如何使用Modifier来设计和定位UI元素,是构造Compose Desktop应用程序的主要工作内容。

用户输入的处理

学会如何使用ButtonTextFieldCheckbox等组合来处理用户输入。

一方面要掌握工具,也就是具体的用于处理用户输入的组合函数,另一方面也要仔细学习不同组件的实际用途,跟需求分析结合在一起。

列表

显示数量不定的数据是GUI设计的常见需求。Compose Desktop提供了LazyColumnLazyRow等组合函数来处理这种情况。

高级主题

  • 自定义绘图:学会如何使用Canvas组合来创建自定义绘图。
  • 动画:探索如何为Compose Desktop应用程序添加动画。
  • 互操作性:了解如何与现有的Swing应用程序进行互操作。

测试

学会为Compose Desktop应用程序编写测试,以确保它按预期工作。

Compose Desktop提供了一些测试工具,如ComposeTestRuleonNode,可以帮助我们编写测试。这些工具可以帮助我们确保我们的应用程序按预期工作,同时也可以帮助我们快速定位和修复问题。

应用部署

学会如何使用compose.desktop.application插件打包和分发Compose Desktop应用程序。

总结

Compose Desktop是一个非常强大的桌面应用程序框架,它提供了一种现代、简洁、易于使用的方式来构建桌面应用程序。学习Compose Desktop需要掌握Kotlin的基本语法、Jetpack Compose的基础知识、状态管理、布局和修饰符、用户输入的处理、列表、高级主题、测试和应用部署等内容。

通过上面的学习过程,就有可能获得对Compose Desktop较深入的理解,并能够构建自己的桌面应用程序。

那么,就让我们开始这段……感情……哦不……旅程吧……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小金标认证的头戴式蓝牙,QCY H3 Pro耳机,平价高音质的新选择

我发现如今市面上百元级的头戴式无线耳机都有非常出色的音质表现了,这其中国产品牌的表现尤为亮眼,与入耳式耳机相比,头戴式耳机拥有更大的发音单元和更包裹耳朵的耳罩设计,提供了更舒适稳固的佩戴体验,在音质和降噪效…

方法+数组

1. 方法 1. 什么是方法 方法定义: // []表示可写可不写[public] [static] type name ( [type formal , type formal , ...]){方法体;[return value ;] }[修饰符] 返回值类型 方法名称([参数类型 形参 , 参数类型 形参 ...]){方法体代码;[return 返回值…

大语言模型(LLM)入门级选手初学教程 II

模型架构 5.1 输入编码: i. 词元序列编码 Input Embedding Module ii. 位置编码(Position Embedding, PE),Transformer 的编码器结构本身无法识别序列中元素的顺序。 𝒙𝑡 𝒗𝑡 &#x1d491…

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、注意力掩码、多头注意力机制

【深度学习】实验 — 动手实现 GPT【二】:注意力机制、多头注意力机制 注意力机制简单示例:单个元素的情况简单示例:计算所有输入词元的注意力权重推广到所有输入序列词元: 注意力掩码代码实现多头注意力测试 注意力机制 简单示例…

数据库(31)——事务

事务 数据库事务(Database Transaction)是数据库管理系统(DBMS)中执行的一组逻辑操作单元,这些操作要么全部成功执行,要么全部不执行,以保持数据的一致性和完整性。事务是确保数据可靠性的重要机…

Android 获取OAID

获取OAID 老规矩,直接上: implementation com.huawei.hms:opendevice:6.11.0.300 // 要获取华为vaid 和aaid,还需添加opendevice 依赖implementation(name: oaid_sdk_2.5.0, ext: aar) import android.content.Context; import android.util.…

每日互动基于 Apache DolphinScheduler 从容应对ClickHouse 大数据入库瓶颈

引言 大家好,我叫张琦,来自每日互动,担任大数据平台架构师。今天我将分享我们团队在基于Apache DolphinScheduler实现ClickHouse零压入库过程中的实践经验。 这个实践项目涉及到两个关键组件:Apache DolphinScheduler和ClickHous…

[vulnhub] Brainpan1

https://www.vulnhub.com/entry/brainpan-1,51/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的,所以靶机IP是166 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-1…

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法,它们不仅帮助我们理解和描述复杂系统的行为,还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发,逐步深入到各种优化算法,并探讨它们在实际问题中的应用。 思维导图文件可获取:https:…

基于Intel Gaudi AI加速器的大语言模型微调与推理优化赛题等你挑战 | CCF BDCI进行时

一年一度的行业盛事2024 CCF大数据与计算智能大赛(简称2024 CCF BDCI)又在激烈进行中啦! 多个赛题等你挑战还没有报名的伙伴们抓紧时间咯,叫上你伙伴练起来吧! 2024 CCF大数据与计算智能大赛 CCF大数据与计算智能大…

使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人

如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHub Issues 一般都是开发者和用户反馈问题的主要渠道。 然而,随着 Issue 数量的增加,及时跟进每一个问题会变得越来越困难。 为了解决这个痛点,我们开发了…

Unreal Engine 5 C++(C#)开发:使用蓝图库实现插件(一)认识和了解Build.cs

目录 引言 一、创建一个C插件TextureReader插件 二、Build.cs文件 三、ModuleRules 四、TextureReader插件的构造 4.1ReadOnlyTargetRules的作用 4.2TextureReaderd的构造调用 4.3设置当前类的预编译头文件的使用模式 4.4PublicIncludePaths.AddRange与PrivateInclude…

探索C嘎嘎:初步接触STL

#1024程序员节|征文# 前言: 在前文小编讲述了模版初阶,其实讲述模版就是为了给讲STL提前铺垫,STL是C中很重要的一部分,各位读者朋友要知道它的份量,下面废话不多说,开始走进STL的世界。 目录&am…

指令系统 I(指令的格式、寻址)

一、指令系统 1. 指令集体系结构 指令(机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。 指令系统是指令集体系结构(ISA&#xf…

如何精准选择Yandex关键词

Hey小伙伴们👋,今天来聊聊如何精准选择Yandex关键词,让你的广告投放效果最大化!🔍 1.使用Yandex关键词工具:Yandex提供了关键词工具,如Yandex Keyword Planner和Yandex Wordstat&#xff0…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

jmeter附件上传

可以采用录制的方式获取附件上传的http请求 普通参数 附件参数 文件名称: 方式一:如果只添项目名称,默认充jmeter的bin目录下获取 方式二:点击文件名称,再点击浏览,可以自己选择文件信息

OpenCV视觉分析之目标跟踪(7)目标跟踪器类TrackerVit的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 VIT 跟踪器由于特殊的模型结构而变得更快且极其轻量级,模型文件大约为 767KB。模型下载链接:https://github.com/opencv/…

如何用Python同时抓取多个网页:深入ThreadPoolExecutor

背景介绍 在信息化时代,数据的实时性和获取速度是其核心价值所在。对于体育赛事爱好者、数据分析师和投注行业而言,能否快速、稳定地抓取到实时比赛信息显得尤为重要。特别是在五大足球联赛中,能够在比赛进行时获得比分、控球率等实时数据&a…

【UBuntu20 配置usb网卡】 记录Ubuntu20配置usb网卡(特别是建立热点)

【UBuntu20 配置usb网卡】 Ubuntu20配置usb网卡(特别是建立热点) 一、 闲言碎语的前言 usb的外置网卡,相比Windows即插即用,Linux买回来一顿折腾,准备把过程梳理一下记录起来。 网卡的方案其实就那几家,…