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

news2024/11/5 22:41:48

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提供了一些函数来帮助我们管理状态,如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.coloradmin.cn/o/2230153.html

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

相关文章

阳振坤:云时代数据库的思考 | OceanBase发布会实录

在2024 OceanBase 年度发布会中,OceanBase 的创始人与首席科学家阳振坤进行了《云时代数据库的思考》的主题分享。本文为演讲实录。 亲爱的朋友们,衷心感谢各位莅临今天的发布会现场。今天是一个云的时代,我想与大家分享,我对于云…

JavaScript语法基础(函数,对象,常用类Array,String,Math和Date)【超详细!!!新手入!!!】

一、函数 1、函数的定义 函数指的是一段可被重复调用的代码块。函数与变量不同,需要先定义再调用。 定义函数的语法格式为: function 函数名(参数1,参数2,...) { 语句; …

OpenGL入门004——使用EBO绘制矩形

本节将利用EBO来绘制矩形 文章目录 一些概念EBO 实战简介utilswindowFactory.hRectangleModel.hRectangleModel.cpp main.cppCMakeLists.txt最终效果 一些概念 EBO 概述: Element Buffer Object 用于存储顶点的索引数据,以便在绘制图形时可以重用顶点数…

linux之网络子系统-用户层接收数据包之同步阻塞方案

一、前言 之前讲述了网络包是如何从网卡送到协议栈的,接下来内核还有一项重要的工作,就是在协议栈接收处理完输入包后要通知到用户进程,如何用户进程接收到并处理这些数据。 进程与内核配合有多种方案,这里我们这分析两种典型的…

高效消防应急:RFID技术救援装备的快速管理

基层应急救援消防设施管理面临着一个既复杂又迫切的挑战。通常,受限的资源和专业人才的短缺导致应对突发事件的反应迟缓,处理结果不理想。同时,消防团队的人员结构和技术能力也在一定程度上决定了应急救援的成效和效率。在数字化浪潮下&#…

TMDOG的Gin学习笔记_01——初识Gin框架

TMDOG的Gin学习笔记_01——初识Gin框架 博客地址:[TMDOG的博客](https://blog.tmdog114514.icu) 作者自述: 停更太久了,是因为开学了课太多了,并且我一直在准备上篇文章的内容正在coding,就先搁置了更新博客QAQ&…

【ROS的TF系统】

系列文章目录 TF系统简介 前面的章节实现了SLAM节点的建图功能: 激光雷达节点—> /scan话题 —>hector_mapping节点—> 地图数据话题/map 本期来实现SLAM节点的定位功能: TF(TransForm)主要描述的是两个坐标系的空间关…

Pandas JSON学习

1.JSON简介 JSON(JavaScript Object Notation,JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。JSON 比 XML 更小、更快,更易解析,Pandas 可以很方便的处理 JSON 数据。 [{"…

SQL Server身份验证模式

SQL Server是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQL Server身份验证。理解这些身份验证方式的概念与更改方式的操作,对于数据库管理员和开发者至关重要。本文将详细介绍身份验证方式的概念以及如何…

DC-9靶机通关

这是这个系列的最后一个靶机了!!!经过前面的锻炼和学习,这次我的目标是尽量不借助任何教程或者提示来拿下这个靶机!!!下面我们看能不能成功!!! 1.实验环境 攻…

百度SEO分析实用指南 提升网站搜索排名的有效策略

内容概要 在数字化时代,搜索引擎优化(SEO)已经成为提升网站曝光度的关键工具。本指南将带您了解SEO的基本知识,帮助您在复杂的网络环境中立足。我们将从关键词优化开始,重点讲解如何选择合适的关键词来提高搜索引擎排…

ML2001-1 机器学习/深度学习 Introduction of Machine / Deep Learning

图片说明来自李宏毅老师视频的学习笔记,如有侵权,请通知下架 影片参考 【李宏毅】3.第一节 - (上) - 机器学习基本概念简介_哔哩哔哩_bilibili 1. 机器学习的概念与任务类型 概念:机器学习近似于寻找函数,用于处理不同类型的任…

用Python打造媒体管理播放器:从零到全功能GUI应用

背景 在日常生活中,我们经常需要管理和播放大量媒体文件。市面上的音频播放器可能功能单一,或者界面复杂。作为一名程序员,我决定使用Python自己打造一个简单yet强大的媒体管理播放器。 C:\pythoncode\new\playsong.py 全部代码 import os…

Cisco Packet Tracer 8.0 路由器静态路由配置

文章目录 静态路由简介一、定义与特点二、配置与命令三、优点与缺点四、应用场景 一,搭建拓扑图二,配置pc IP地址三,pc0 ping pc1 timeout四,配置路由器Router0五,配置路由器Router1六,测试 静态路由简介 …

【HarmonyOS】鸿蒙系统

文章目录 前言一、鸿蒙OS概述1. 定义与特性2. 核心技术理念3. 技术架构设计1. 应用层2. 框架层3. 系统服务层4. 内核层 二、分布式架构分布式架构的核心理念分布式能力的实现关键技术 三、 总结 前言 鸿蒙OS是由华为推出的一款开源操作系统,旨在满足智能终端设备的…

《双指针篇》---移动零

题目传送门 这道题可以归类为 数组划分/数组分块 。 题目制定了一个规则,我们可以在这个规则下,将数组划分为若干个区间。 这道题让我们把所有非零元素移动到左边。所有零元素移动到右边。 将数组划分为: 左区间非0; 右区间&…

网络编程项目之UDP聊天室

项目要求 利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件。 问题思考 客户端会不会知道其它客户端地址? UDP客户端不会直接互连,所以不会获知其它客户端地址…

【NOIP普及组】 FBI树

【NOIP普及组】 FBI树 C语言版本C 版本Java版本Python版本 💐The Begin💐点点关注,收藏不迷路💐 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又…

Lucene的概述与应用场景(1)

文章目录 第1章 Lucene概述1.1 搜索的实现方案1.1.1 传统实现方案1.1.2 Lucene实现方案 1.2 数据查询方法1.1.1 顺序扫描法1.1.2 倒排索引法 1.3 Lucene相关概念1.3.1 文档对象1.3.2 域对象1)分词2)索引3)存储 1.3.3 常用的Field种类 1.4 分词…

不适合的学习方法

文章目录 不适合的学习方法1. 纯粹死记硬背2. 过度依赖单一资料3. 线性学习4. 被动学习5. 一次性学习6. 忽视实践7. 缺乏目标导向8. 过度依赖技术9. 忽视个人学习风格10. 过于频繁的切换 结论 以下是关于不适合的学习方法的更详细描述,包括额外的内容和相关公式&…