GUI JFrame实战:六一节,爱她就给她画个哆啦A梦吧

news2024/11/17 13:23:10

文章目录

    • 前言
    • 技术积累
      • 容器分类
      • 主要API
      • Graphics图像
    • 绘画方法
    • 实战演示
      • 1、创建哆啦A梦渲染类
      • 2、创建测试方法
      • 3、查看渲染结果
    • 写在最后

前言

相信很多使用JAVA高级语言的同学都知道GUI图形用户界面,开发人员可以使用java.awt、javax.swing两个API绘画想要的图形并通过调用计算机渲染出来。这不,六一节就要来了,为了切合这个国际的盛大节日,我们就用JFrame渲染一个哆啦A梦吧。
在这里插入图片描述

技术积累

容器分类

GUI容器的分类有窗口(JFrame)、弹窗(JDialog)、面板(JPanel)、滚动面板(JScrollPanel),本次直接使用JFrame窗口进行像展示。

主要API

主要api有awt抽象窗口工具包、swing抽象窗口工具扩展。AWT需要调用本地系统方法来实现功能,属重量级控件,而Swing是在AWT的基础上,建立的一套图像界面系统,其中提供了更多的组件,而且完全由Java实现,增强了移植性,属轻量级组件。

Graphics图像

package java.awt Graphics图像类,主要负责绘画图形,提供主要方法有:
fillRect()填充矩形
fillOval()填充椭圆
fillPolygon()填充多边形
fillRoundRect() 填充圆角矩形
drawOval()勾画椭圆
drawLine() 勾画直线
drawArc() 勾画弧形
setColor()设置图形或者直线颜色

绘画方法

1、首先将哆啦A梦拆分为多个部分:
头部蓝色椭圆、身体蓝色矩形、手臂蓝色多边形、手脚白色椭圆、脸部白色椭圆、胸口白色椭圆、围巾红色圆角矩形、铃铛黄色椭圆、铃铛花纹勾画、口袋勾画、眼睛椭圆、眼仁椭圆、鼻子椭圆、鼻子轮廓勾画、鼻子中间白色椭圆、嘴巴勾画、胡须勾画
2、选择自己喜欢的构图方式,可以上到下,下到上,从里到外进行图像制作

实战演示

根据划分的图形组成部分,我选用的是从里到外进行绘画

1、创建哆啦A梦渲染类

哆啦A梦渲染类DrawDoraemon继承JFrame窗口,覆写paint图层方法,用JFrame窗口来调用计算机展示我们绘制的图像。

/**
 * gui勾画一个哆啦A梦
 * @author senfel
 * @version 1.0
 * @date 2023/5/30 11:07
 */
public class DrawDoraemon extends JFrame{
    public DrawDoraemon () {
        super("哆啦A梦");
        //窗口可见
        setVisible(true);
        //设置窗口大小
        setSize(770,460);
    }

    /**
     * 图层paint
     * @param g
     * @author senfel
     * @date 2023/5/30 11:12
     * @return void
     */
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.white);
        //设置图形轮廓
        g.fillRect(0, 0, 770, 450);
        Color blue = new Color(105, 151, 224);
        g.setColor(blue);
        //头部椭圆填充
        g.fillOval(265,60,240,230);
        //身体矩形
        g.fillRect(309, 290, 150, 120);
        //左右手臂填充
        int[] xValues = {309,270,270,309};
        int[] yValues = {290, 278, 308, 321};
        g.fillPolygon(xValues,yValues,4);
        int[] xValues2 = {459,505, 505, 459};
        int[] yValues2 = {290, 278, 308, 321};
        g.fillPolygon(xValues2,yValues2,4);

        //手脚椭圆填充
        g.setColor(Color.white);
        g.fillOval(241,271,40,40);
        g.fillOval(492, 271, 40, 40);
        g.fillOval(373, 402, 20, 20);
        g.fillOval(290, 405, 90, 25);
        g.fillOval(386, 405, 90, 25);
        //勾画手脚椭圆
        g.setColor(Color.black);
        g.drawOval(241,271,40,40);
        g.drawOval(492, 271, 40, 40);
        g.drawOval(290, 405, 90, 25);
        g.drawOval(386, 405, 90, 25);

        //脸部椭圆填充
        g.setColor(Color.white);
        g.fillOval(285, 130, 200, 150);
        //胸口椭圆填充
        g.fillOval(323, 260, 120, 112);
        //围巾圆角矩形填充
        g.setColor(Color.red);
        g.fillRoundRect(303, 275, 166, 16, 15, 15);
        //胸口铃铛椭圆填充
        g.setColor(new Color(204,204,0));
        g.fillOval(369, 278, 30, 30);
        //勾画铃铛两条横线
        g.setColor(Color.black);
        g.drawLine(371, 285, 397, 285);
        g.drawLine(369,290,400, 290);
        //勾画铃铛黑点
        g.fillOval(379, 293, 10, 10);
        //勾画铃铛竖线
        g.drawLine(384, 300, 384, 307);

        //勾画口袋弧形
        g.drawArc(348, 290, 70, 70, 0, -180);
        //勾画口袋上部横线
        g.drawLine(348, 325, 418, 325);
        //眼睛椭圆填充
        g.setColor(Color.white);
        g.fillOval(323,    100, 60, 70);
        g.fillOval(383, 100, 60, 70);
        //勾画眼睛轮廓
        g.setColor(Color.black);
        g.drawOval(323,100,60,70);
        g.drawOval(383,100,60,70);
        //黑色眼仁椭圆填充
        g.fillOval(352, 138, 10 ,16);
        g.fillOval(402, 138, 10, 16);
        //鼻子椭圆填充
        g.setColor(Color.red);
        g.fillOval(369, 158, 27, 27);
        //勾画鼻子轮廓
        g.setColor(Color.black);
        g.drawOval(369,158,27,27);
        //鼻子白点椭圆填充
        g.setColor(Color.white);
        g.fillOval(384, 161, 10, 13);

        //勾画嘴巴弧形和直线
        g.setColor(Color.black);
        g.drawArc(290, 60, 190, 190, -45,-90);
        g.drawLine(383, 185, 383, 250);
        //勾画6根胡须
        g.drawLine(300,182,348, 189);
        g.drawLine(293, 200, 348, 200);
        g.drawLine(298, 217, 348, 211);
        g.drawLine(419, 189, 468, 182);
        g.drawLine(419,200, 472, 200);
        g.drawLine(419, 211, 469, 218);
    }

2、创建测试方法

@Slf4j
@SpringBootTest
class DemoApplicationTests {

    /**
     * 创建哆啦A梦
     * @author senfel
     * @date 2023/5/30 11:50
     * @return void
     */
    public void doraemonTest(){
        //创建一个哆啦A梦
        DrawDoraemon doraemon = new DrawDoraemon();
        doraemon.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

3、查看渲染结果

在这里插入图片描述

写在最后

用JAVA语言GUI图形用户界面渲染图像还是比较容易,主要用到了JFrame窗口容器。在实际的开发中只需要覆写窗口的paint图层,并使用Graphics图像的一些常用的构图方法即可。

⭐️⭐️⭐️⭐️六一快乐,哆啦A梦来啦⭐️⭐️⭐️⭐️

⭐️路漫漫其修远兮,吾将上下而求索 🔍

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

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

相关文章

蓝牙规范系列--基础篇(第一篇)

一、前言 玩过物联网的小伙伴肯定知道ESP32(一款WiFi/BT SoC),那肯定也知道蓝牙这个东西,蓝牙技术最近几年由于蓝牙耳机很火,那蓝牙技术到底是怎样的呢? 蓝牙无线技术是一种短距离的通信系统旨在替换便携式…

c++学习——友元、全局友元函数、友元类

友元 类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办? 解决方法是使用友元函数,友元函数是一种特权函数,c允许这个特权函数访问私有…

python 自动编译VS项目

目录 一、python自动编译项目 1、环境变量 1) CMAKE 2)VS 2、CMAKE 生成VS项目 1) cmake 命令介绍 2)python 调用cmake 命令 3、devenv编译VS项目 1) devenv介绍 2)devenv命令行开关 3) 自动编译VS项目 一、python自动编译项目 …

04 布隆过滤器BloomFilter

是什么 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制数组一系列随机hash算法映射函数,主要用于判断一个元素是否在集合中。通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景&a…

C++ 和机器学习:使用 C++ 执行 ML 任务的简介

C 和机器学习:使用 C 执行 ML 任务的简介 介绍 C 是一种高性能编程语言,非常适合机器学习( ML ) 任务。尽管它在 ML 中可能不像 Python 或 R 那样流行,但它在速度和内存效率方面具有优势。 在本文中,我们将概述使用 C 执行 ML 任务…

“双碳同行者大会”成功举办,绿色家居企业参与其中

2023年5月27日 ,由万科集团创始人、深石集团创始人王石先生创立的碳中和社区品牌“生物圈三号”在深圳大梅沙成功举办了“回归未来双碳同行——生物圈三号双碳同行者大会暨全球运河穿越新书发布会”。 生物圈三号作为社区碳中和综合解决方案平台,为建筑、…

Word控件Spire.Doc 【其他】教程(5):在 Word 中嵌入媒体文件

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

Axios请求失败重刷接口

需求背景 页面接口请求时偶尔会出现 Network Error 异常报错,重新请求就会请求成功 接口没办法捕获异常原因,前端来做一次重刷解决问题 net::ERR_SSL_PROTOCOL_ERRORnet::ERR_CONNECTION_REFUSED 解决思路 记录请求map(以url为唯一标识&…

Live800:智能客服机器人有哪些核心功能?

随着互联网的普及和用户服务要求的不断升级,许多企业已经开始关注在线客服系统以及智能客服机器人的应用。 那么,智能客服机器人在解决企业痛点的过程中,充分使用了哪些核心功能呢? 一、自然语言处理 客户提问的方式千奇百怪&am…

Hindawi官宣上线8本新刊!这6本被踢SCI期刊,EI正常在检

Hindawi官宣:8本新刊上线 2023年5月23日,Hindawi官宣与IET的8本合作期刊在完全开放获取模式下全面上线,所有期刊名称仍然保留IET抬头,但将由Hindawi全面负责出版、主持和运营等相关事宜。 No.1 IET BioMetrics 该期刊关注生物识…

linux shell编程规范和变量

一、shell简述 概念:shell解释器,翻译官功能,与内核进行沟通的应用程序。 把代码翻译为二进制,让内核处理,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核…

功能上新| GPU篇:SoC GPU信息、GPU Counter性能指标

在玩家要求游戏更流畅、画质更精美的今天,优化GPU过度使用导致的性能问题成了大多数游戏开发团队关注的核心。当项目的GPU压力达到一定阈值时,卡顿、掉帧、发热、降频等问题便随之而来,严重影响用户体验。 为了解决项目的GPU压力问题&#x…

Kafka的常用命令

提前说明:下述所有命令都是需要进入到Kafka服务的的bin目录下执行,即下图所示目录。 1.查看主题列表 kafka-topics.sh --list --bootstrap-server ip:端口 2.创建主题 如下为创建一个单分区单副本的主题的命令示例: kafka-topics.sh --c…

Hack The Box - sequel关卡

TASK 1 任务 1 During our scan, which port do we find serving MySQL? 在扫描过程中,我们发现哪个端口为 MySQL 提供服务? 3306TASK 2 任务 2 What community-developed MySQL version is the target running? 目标运行的是哪个社区开发的MySQL版…

基于nodejs+Vue的少儿编程课程网上报名系统express+vscode

近年来,随着网络技术的不断发展,越来越多人在网站查询各种信息,少儿编程网上报名系统对用户和管理员都有很大帮助,少儿编程网上报名系统通过和数据库管理系软件协作来实现用户与管理员之间的一个很好的操作平台,基于这…

【大数据学习篇11】广告点击流实时统计

学习目标/Target 掌握广告点击流实时统计实现思路 掌握利用Kafka生产用户广告点击流数据 了解数据库设计 掌握如何创建Spark Streaming连接 掌握利用Spark Streaming读取业务数据 掌握利用Spark读取黑名单用户 掌握利用Spark Streaming过滤黑名单用户 掌握利用Spark St…

bug:使用useClipboard不生效问题

背景 使用vueuse/core的useClipboard来实现复制功能,没有生效。 原因 useClipboard 的底层是是使用navigator.clipboard实现的。但是在 http协议 中,navigator.clipboard打印undefined(如下图),导致在http协议中使用…

旅行商问题TSP

目录 蚁群算法 Hopfield网络 遗传算法 免疫算法 蚁群算法 求解思路 Hopfield网络 Hopfield网络适合求结果的次优解,可以保证解向能量函数最小值方向收敛,但不能确保达到全局最小点。 实现能量函数 网格能量的最小值对应于最佳或者次最佳的路径距离。…

MySQL部署PXC集群-全网最详细

MySQL部署PXC集群 一,PXC了解 1.PXC介绍 Percona XtraDB Cluster(简称PXC) 是基于Galera的MySQL高可用集群解决方案 Galera Cluster是Codership公司开发的一套免费开源的高可用方案 PXC集群主要由两部分组成:Percona Server …

计算机网络开荒1-概述

文章目录 一、网络基本概述1.2 InternetInternet组成Internet服务角度 1.3 网络协议 二、计算机网络结构2.1 计算机网络结构2.1.1 网络边缘2.1.2 接入网络 物理介质2.1.2.1 DSL2.1.2.2 电缆网络2.1.2.3 家庭网络接入2.1.2.4 企业网络接入2.1.2.5 无线网络接入 2.1.3 网络核心 三…