- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章 鼠标绘直线(绘图+事件)
在Java语言中利用绘图机制可以绘制许多图形,对于图形用户界面来说,一些简单的图形是必须的,所以程序员必须掌握绘图机制。对于一个应用程序,如果想实现与用户良好的互动功能,除了事件处理机制外,对于绘图的处理也是必不可少的。本章不仅通过鼠标绘直线的功能介绍Java语言中的绘图机制和事件处理机制,而且还详细介绍绘图的基础知识。
本章的学习目标如下:
掌握鼠标绘直线项目;
理解为什么要使线程具有同步性;
掌握实现线程同步的两种方式。
13.1 鼠标绘直线原理
“鼠标绘直线”项目用来模拟用鼠标绘直线的功能,在具体使用时首先用鼠标左键单击画布,然后拖动鼠标到另一个地方,最后释放鼠标左键。这时不仅在两点间绘制直线,同时还将显示出端点的坐标。
13.1.1 项目结构框架分析
对于鼠标绘直线项目,根据面向对象的思想,需要创建两个对象,即直线和窗口。鼠标绘直线项目目录如图13.1所示,各个目录的功能如下。
包com.cjg.repaine:通过重画技术实现鼠标绘直线功能。
包com.cjg.buffer:通过双缓冲技术实现鼠标绘直线功能。
图13.1 项目目录
13.1.2 项目功能业务分析
本节将向读者介绍整个项目要实现的功能。这些功能包括鼠标绘直线的初始化,按住鼠标功能和放开鼠标后的功能。
1.初始化界面
当运行鼠标绘直线项目中的类DrawLine后,就会出现如图13.2所示的初始界面,该界面只是一个窗口。
图13.2 初始界面
2.画点和鼠标绘直线功能
如果想绘制点时,只要用鼠标左键单击画布,然后释放鼠标左键,这时就会在画布中显示出一个点,同时显示出该点的坐标。如果想绘制直线,需要在画布中单击鼠标左键,然后在不释放鼠标键的情况下移动鼠标,最后在画布的其他地方释放左键。这时就会在鼠标单击的两个地方之间显示出一条直线,同时会显示出直线端点的坐标,具体过程如图13.3所示。
图13.3 绘制的具体过程
3.重绘功能
将窗口最小化后再恢复正常化显示的过程,其实就是重绘的过程。如果考虑重绘功能,恢复正常化显示就会出现正常的窗口;否则就会出现空白窗口,具体过程如图13.4所示。
图13.4 重绘的过程
13.2 鼠标绘直线的实现过程
本节通过绘图机制和事件机制的相关知识来实现鼠标绘直线项目,具体程序架构如图13.5所示,它包含一个直线的类MyLine.java和一个窗口的类DrawLine.java。
图13.5 程序关系图
13.2.1 直线的类
MyLine.java类用来模拟直线对象,该类除了拥有直线端点的坐标成员变量外,而且还拥有一个画自己的drawMe()方法,具体内容如代码13.1所示,该类的UML如图13.6所示。
图13.6 直线类图
代码13.1 直线类:MyLine.java
class MyLine {
//创建成员变量
private int x1; //直线起点的x坐标
private int y1; //直线起点的y坐标
private int x2; //直线终点的x坐标
private int y2; //直线终点的y坐标
public MyLine(int x1, int y1, int x2, int y2) {//构造函数
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public void drawMe(Graphics g) {
g.setColor(Color.red); //设置绘图颜色为红色
//设置文本的字体
g.setFont(new Font(隶书, Font.ITALIC | Font.BOLD, 30));
g.drawString(new String(x1 + , + y1), x1, y1); //打印鼠标按下时的坐标文本
g.drawString(new String(x2 + , + y2), x2, y2); //打印鼠标释放时的坐标文本
g.drawLine(x1, y1, x2, y2); //绘制直线
}
}
【代码解析】
在上述代码中,该类拥有4个字段x1、y1、x2和y2,同时在drawMe()方法中通过drawString()和draw
文档评论(0)