在之前的文章中,我们了解和简单掌握了类和对象、继承、事件监听机制、接口的相关内容,那现在我们已经可以尝试自己写一个画图程序了\(^o^)/

那我们需要的API类有哪些?

界面类DrawFrame里

Color(为简略将包名省略,下同)(用于设置颜色);Dimension(用于设置除了顶级容器外其它组件的大小);FlowLayout(用于流布局);Graphics(用于画笔);JFrame、JButton(用于设置窗体和按钮)。

事件处理类DrawListener里

BasicStroke(用于调整画笔粗细);Graphics2D(用于画笔);Imagine(用于调用图片);RenderingHints(用于设置抗锯齿);ActionEvent、ActionListener(用于实现接口);MouseAdapter、MouseEvent(用于继承鼠标适配器);Color;Graphics。

明确了我们的目标,并理清了我们所需要的API类,我们就可以着手开动了!

\("▔□▔)/\("▔□▔)/\("▔□▔)/。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

首先定义DrawFrameX窗体类

(此处还未定义DrawListenerX事件处理类,会报错)

然后再定义DrawListenerX类

在DrawListenerX事件处理类中,我们首先定义一个setG方法,将DrawFrameX中的窗体和画笔“借用”过来:

然后思考:要如何实现识别按钮上文字的功能,如何去更改颜色呢?我们可以先定义String类属性type和Color类属性color,再于actionPerformed()方法中获取按钮上的文字信息,因为颜色按钮上是没有文字的,所以如果ac为空,则说明该按钮是颜色按钮,将按钮的背景颜色赋给color;否则将按钮上的文字赋给type。

现在开始着手实现功能。

对于几乎所有的图形,我们需要靠鼠标的按下、拖动来画出,在mousePressed()方法中

每一次需要画图时我们必然会执行将鼠标按下的动作,因此这个方法总会在开始被执行,因此可以在这个方法中写下画笔默认的属性。

在mouseReleased()方法中

(未完)

画直线和预设文字应该比较好理解,在画三角形(任意多边形)时,我们是先拖动出一条线,再通过点击达到首尾相连的效果。通过指示器,我们不仅能限制一次只能靠拖动画一条直线,还能将首次拖动的位置储存。

(上接)

这里我们需要解决一个问题,那就是如果不往右下角拖动(即x-x0与y-y0不全为正数),显示出的图形就会有问题,甚至显示不出图形。在这里我的方法是如果释放鼠标的坐标数值比按下的小,则将两者互换。

在mouseClicked()方法中

在点击的位置获取坐标,如果要画的是三角形,则直接将首尾相连并将指示器置为1;如果要画的是任意多边形,则点击位置与上一个记录的点相连,并将点击位置坐标赋给存储上一个记录点的xx、yy变量。若要结束绘制,双击。

在mouseDragged()方法中

(语句有些是冗余的,还请见谅)(实际使用中,喷漆的效果不是很好…………)

要实现曲线,思路和绘制多边形的差不多,将新得到的点的坐标数值赋给储存上一个记录点的变量。

效果图

大功告成!!当然画图程序还远远达不到预期,如何解决当将画板窗体最小化或者改变窗体大小的时候,画过的图形就消失的问题,就留到之后的文章再讨论吧!

java 画笔粗细_Java初学记(四):一个简单的画图程序相关推荐

  1. java 画笔 粗细_java中如何设置线条的粗细例题?

    展开全部 Java线条粗细32313133353236313431303231363533e58685e5aeb931333337386665一般要使用java Swing方面的知识import ja ...

  2. java 画笔 粗细_Java画笔的简单实用方法

    Java中提供了画笔,可以使用画笔做出界面上的任何东西,接下来先熟悉一下画笔的使用过程,以画一条线为例. 源码: import java.awt.Graphics; import java.awt.e ...

  3. java中一个简单的涂鸦程序

    涂鸦是一个在网络聊天中经常会用到的工具,由于笔者水平有限,只能说下一个简单的涂鸦,就是在面板中可以用画笔自己花一些东西.我使用的是画实心矩形(或者圆形)来达到目的,通过监听鼠标事件来获得鼠标点击的坐标 ...

  4. 电脑用java怎么编程,使用java编程从0到1实现一个简单计算器

    学习编程语言最重要的就是实践.很多小伙伴在学习完编程语言后,一直停留在基础阶段,只懂一大堆理论知识,而不懂得实践.那么,今天我们一起来动手做一个小计算器,回顾下学习过的知识,同时这也是很多大学计算机专 ...

  5. JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...

    用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...

  6. java自己实现linkedlist_自己根据java的LinkedList源码编写的一个简单的LinkedList实现...

    自己实现了一个简单的LinkedList /** * Create by andy on 2018-07-03 11:44 * 根据 {@link java.util.LinkedList}源码 写了 ...

  7. 用java开发一个简单的安卓程序,Android NDK开发简单程序分享(Hello Word!)

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  8. 创建一个简单的应用程序窗口,显示“欲穷千里目 更上一层楼”。这一行文字从窗口中向左滚动显示,而且每显示一轮,改变一次颜色,改变一次字体,一个周期为4种颜色,分别为红、绿、黄、蓝,四种字体分别为宋体、楷

    创建一个简单的应用程序窗口,显示"欲穷千里目 更上一层楼".这一行文字从窗口中向左滚动显示,而且每显示一轮,改变一次颜色,改变一次字体,一个周期为4种颜色,分别为红.绿.黄.蓝,四 ...

  9. Java 百度AI 写一个简单的手势识别程序

    教程地址:请关注我的https://edu.csdn.net/course/detail/23001 Java写一个简单的手势识别程序,这里采用百度是AI,视觉技术中的人体分析中的手势识别,识别图片中 ...

  10. java递归怎么写_什么是递归?用Java写一个简单的递归程序

    什么是递归?用Java写一个简单的递归程序 递归的定义 递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来解决. 递归的要素 自定义递归函数,并确定函数的基本功能 ...

最新文章

  1. Newtonsoft.Json code
  2. Scala花括号和圆括号的区别
  3. Algs4-2.1.37部分有序
  4. 关于耳机的国标和美标的区分
  5. php 邮件验证_PHP程序来验证电子邮件地址
  6. windowns2019辅域添加
  7. matlab 元胞调用方法你真的理解了么?
  8. 在CentOS 7上利用systemctl添加自定义系统服务 /usr/lib/systemd/
  9. Redis学习笔记(三)
  10. java cp命令:命令行指定需要加载的类classpath
  11. 浅谈漏洞来源(CVE,NVD,CNVD,CNNVD)
  12. java计算机毕业设计企业员工工资管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  13. Yasm的作用及NASM详解
  14. 【DNS区域传输测试/子域暴力破解/横幅版本检测/生成映射】
  15. word排版案例报告_文章为什么要排版?如何排版?这篇文章告诉你真相
  16. Springboot发送手机短信验证码并且校验
  17. kail之MSF渗透测试
  18. 笔记本在AHCi模式下识别不到硬盘2(涵图片)
  19. 一文了解CDN应用加速
  20. Velodyne Lidar将被纳入罗素2000指数

热门文章

  1. c语言数组升序排列,数组输入各数之间用空格隔开,输出用空格隔开
  2. 我的开源项目:C++ Qt高仿QQ影音视频播放器
  3. STM32F407二维码识别(使用内部RAM+无FIFO摄像头OV7670
  4. Codeforces 106 Buns【多重背包】
  5. 学计算机能把照片还原吗,要在计算机上恢复的1英寸照片的图像大小是多少? -恢复照片图像尺寸恢复...
  6. android: Apostrophe not preceded by \ 错误
  7. 【IOS 之愤怒的小鸟】使用Lua语言:Wax框架详解
  8. 3000亿茶行业市场如何乘势数字浪潮,跑出世界品牌
  9. vue3使用dayjs
  10. 含泪整理最优质时间轴网页特效素材,你想要的这里都有