【Java精品源码栏目提醒】:网学会员--在 Java精品源码编辑为广大网友搜集整理了:画图板的java实现 - 其它资料绩等信息,祝愿广大网友取得需要的信息,参考学习。
仿真 Windows_XP 画图板的
java 实现( 一 )一、项目开发与相关的技术点掌握:Question 1:高仿 Windows_XP 画图板需要一些什么技术点?需要的技术点包括:窗体的创建、菜单栏创建、数组的使用、颜色选择器的创建、鼠标动作监听器的创建与添加、绘制图形相应的方法的实现、重绘的实现,文件输出流与输入流的结合实现图画的存储读取、基本存储格式的运用(伪 BMP 图片格式的使用)。
Question 2:高仿 Windows_XP 画图板的开发需要通过的步骤?一个简单的高仿 Windows_XP 画图板其实通过一下的几步便可实现。
①、创建窗体、创建画布(画图区域)、创建菜单栏、创建工具栏、创建颜色选择栏;②、创建鼠标监听器对象并添加到画图区域(画布)上,实现相应坐标点数据的传入;③、调用相应的方法,根据传入的坐标数据,在画图区域(画布)上实现相应图形的绘制;④、根据“缓存—内存”的关系,定义“重绘”的方法,在窗体最小化(缓存释放)之后再次打开窗体依旧能看到所画图形的实现;⑤、文件输出流和文件输入流的创建,及相应的包装,实现最后的保存与读取;⑥、保存文件格式的自定义,伪 BMP 图片格式的自定义读取存储;⑦、网络图片资源的获取,使图形按钮更相似。
二、项目开发过程与技术点掌握过程:Part 1:窗体(JFrame)、容器(JPanel)、按钮(JButton)与布局;该部分的掌握,最初源于对于 Windows_XP 计算器的模仿: 窗体(JFrame),即一个基本的外围界面,可理解为最大的外围容器,可将 JPanel 之类的小型容器放于其上,一个最简单的窗体包括:窗体开头 、 (窗体名) 默认使用的边框(表现为设置好的大小格式)、窗体右上角自带“最小化”、“最大化”、“关闭窗体”三个按钮、以及其余属性。
如图所示:其实现的代码如下:
Java 代码 1. import javax.swing.JFrame 2. / 3. 定义窗体示范类,该类继承自 JFrame 4. 5. author 吴少聪 6. / 7. public class Calcolator extends JFrame 8. / 9. 主函数部分 10./ 11.public static void mainString args 12.// 实例化一个对象:cal,并且用该对象调用 init 方法 13.Calcolator cal new Calcolator 14.cal.init 15. 16./ 17. 定义初始化窗体界面的方法:init 18./ 19.public void init 20.// 设置窗体的属性 21.this.setTitlequot这是一个窗体,可以随意设置窗体名quot// 窗体名的设 定 22.this.setSize320 250// 窗体大小的设定,其大小单位为像素点数 量,可理解为分辨率为 320x250 23.this.setDefaultCloseOperation3// 设置窗体关闭时退出程序 24.this.setLocationRelativeTonull// 设置窗体创建之后在屏幕上居 中显示 25.this.setResizablefalse// 设置窗体大小固定,无法实现最大化 26.this.setVisibletrue// 设置窗体对外可见(可显示出来) 27. 28. ……………………………………分割线…………………………………………………… 窗体的创建这就像是搭建了一个大体的框架,如一个衣柜或是一个壁橱钉好了最外围的框架,现在我们要往上添加放置具体器物的格子,即放置最基本的 JPanel 小容器。
如图所示:窗体要变成这样,我们需要做出如下的
源码添加:
Java 代码 1. import
java.awt.Color 2. import
java.awt.Dimension 3. import javax.swing.JFrame 4. import javax.swing.JPanel 5. 6. / 7. 定义窗体示范类,该类继承自 JFrame 8. 9. author 吴少聪 10./ 11.public class Calcolator extends JFrame 12./ 13. 主函数部分 14./ 15.public static void mainString args 16.// 实例化对象 cal,并且用该对象调用 init 方法 17.Calcolator cal new Calcolator 18.cal.init 19. 20. 21./ 22. 定义初始化窗体界面的方法:init 23./ 24.public void init 25.// 设置窗体的属性 26.this.setTitlequot这是一个窗体,可以随意设置窗体名quot// 窗体名的设 定 27.this.setSize420 250// 窗体大小的设定,其大小单位为像素点数 量,可理解为分辨率为 420x250 28.this.setLocationRelativeTonull// 设置窗体创建之后在屏幕上居 中显示 29.this.setResizablefalse// 设置窗体大小固定,无法实现最大化 30. 31.// ltltltltltltltltltltltltltltJPanel 容器面板的创建与放置gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgt// 32.JPanel panel new JPanel// 创建(实例化)一个 JPanel 面板对象: panel 33.panel.setPreferredSizenew Dimension65 65// 同样的,面板自 己也有大小,设置面板的大小 34.panel.setBackgroundColor.blue// 设置面板自身的背景颜色:蓝色 (可自定义) 35. 36.this.addpanel// 将创建并定义好的面板放置在窗体上 37.this.setDefaultCloseOperation3// 设置窗体关闭时退出程序 38.this.setVisibletrue// 设置窗体对外可见(可显示出来) 39. 40. ……………………………………分割线…………………………………………………… 很显然,出错了……错误在哪?我们往窗体上放置面板,窗体的大小(计算边框)为420250 分辨率,而在我们自己的设置当中,面板的大小仅为 6565 分辨率,按理来说面板与窗体大小相差甚远,但是从运行情况上来看,窗体明显被蓝色背景颜色的面板占满,违背了我们设置大小差异的初衷。
那么,问题在哪?答案很简单:布局!所谓布局,通俗来讲便是放置具体器物的空间规划,而窗体本身默认一个布局:边框布局 BorderLayout,由于我们未加定义具体的参数,所以布局将面板拉伸扩充至将窗体界面占满为止。
BorderLayout.布局的形式如下:lt--EndFragment--gt 因此我们只需要把
源码中的部分语句增添说明便可:this.addpanel// 将创建并定义好的面板放置在窗体上 改为: this.addpanel BorderLayout.SOUTH// 将创建并定义好的面板放置在窗体上 便可实现:lt --EndFragment--gt或是: 虽然能够做到对布局做一个大体的改变,但是仍然发现无论是什么样的方位安排,JPanel 面板都会填充这一方位,我们定义分辨率的两个数据中也只有一个能起到作用,这也必然达不到我们预期的希望:按照我们的计划自由安排 JPanel 面板在窗体上的摆放,且大小完全由我们自定义,而不是方位上的拉伸扩充。
于是我们可以采取使用别的布局方法:
Java 语言三大布局管理方法:FlowLayout(流式布局)、BorderLayout边框布局、GridLayout网格布局管理器 这里采用 FlowLayout(流式布局)进行改造示范: 添加如下
源码语句: lt--EndFragment--gtJava 代码 1. this.setLayoutnew FlowLayoutFlowLayout.CENTER// 定义窗体为 流式布局,并将 JPanel 面板放于正中间 并将之前做的布局更改取消,得到如下效果:lt --EndFragment--gt 现在达到了一个比较令人满意的效果,JPanel 面板的方位和大小都能够按照安排摆放了,但是要实现一开始的仿 Windows_XP 计算器面板效果,还有两部分未完成:文本框与按钮。
由于文本框并不是高仿 Windows_XP 画图板开发所需的技术点,这里简要叙述,且该计算器只是单纯的面板画面模仿,并未实现任何计算和输入功能。
文本框(JTextField)的代码实现如下: lt--EndFragment--gtJava 代码 1. //ltltltltltltltltltltltltltltltltJTextField 文本框的创建与添加gtgtgtgtgtgtgtgtgtgtgtgtgt// 2. JTextField txt new JTextField27//创建(实例化)一个文本框对 象 txt 3. txt.setTextquot这是一个文本框quot//设置文本框显示的字符串 4. txt.setHorizontalAlignmentJTextField.LEFT//设置显示文本框从 左边开始显示字符串 5. txt.setEditablefalse 6. 7. panel.setLayoutnew FlowLayoutFlowLayout.CENTER//面板本身也 可以设置布局 8. panel.addtxt//将文本框添加到 JPanel 面板上由于需要效果明显一些,所以在添加时,取消了窗体的流式布局,实现效果如下: lt--EndFragment--gt …………………………………………分割线……………………………………………… 文本框的简单实现如上,还有绝大部分的功能未有实现,有待后期学习的发掘,现在进入重要性较高的一个部分:按钮(JButton)的创建和添加。
按钮创建与添加的
源码实现如下: lt--EndFragment--gtJava 代码 1. //ltltltltltltltltltltltltltltltltJButton 按钮的创建与添加gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgt// 2. String buttonNamenew Stringquot这是一个按钮quot//定义一个字符串常 量 3. JButton jbn new JButtonbuttonName//创建(实例化)一个按钮对 象:jbn 4. jbn.setFontnew FontquotArial NarrowquotFont.BOLD18 5. panel.addjbn//添加此按钮到面板上 6. 实现过后的效果如下: (可看见按钮上自动设置了“焦点”) …………………………………………分割线………………………………………………到了现在,基本的技术点已经演示完一遍,在实例中,多个按钮的创建可以通过循环数组,且可以采取整体的网格布局,但由于高仿 Windows_XP 画图板的开发重点并不仅仅是一个画面风格的构建,所以在这里不做仿 Windows_XP 计算器界面逐步完善过程的进一步阐述,现将完善后的全部
源码分享如下,大家可以多多批评指正: lt--EndFragment--gtJava 代码 1. import
java.awt.BorderLayout 2. import
java.awt.Color 3. import
java.awt.Dimension 4. import
java.awt.FlowLayout 5. import
java.awt.Font 6. import
java.awt.GridLayout 7. 8. import javax.swing.JButton 9. import javax.swing.JFrame 10.import javax.swing.JPanel 11.import javax.swing.JTextField 12.13./14. 定义计算器类,该类继承自 JFrame15.16. author 吴少聪17./18.public class Calcolator extends JFrame 19./20. 主函数部分21./22.public static void mainString args 23.// 实例化对象 cal,并且用该对象调用 init 方法24.Calcolator cal new Calcolator25.cal.init26.27.28./29. 定义初始化窗体界面的方法:init30./31.public void init 32.// 设置窗体的属性33.this.setTitlequot仿 Windows_XP 计算器界面quot// 窗体名的设定34.this.setSize420 250// 窗体大小的设定,其大小单位为像素点数 量,可理解为分辨率为 420x25035.this.setLocationRelativeTonull// 设置窗体创建之后在屏幕上居 中显示36.this.setResizablefalse// 设置窗体大小固定,无法实现最大化37.38.// ltltltltltltltltltltltltltltJPanel 容器面板的创建与放置gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgt//39.JPanel panel01 new JPanel// 创建(实例化)一个 JPanel 面板对 象:panel0140.panel01.setPreferredSizenew Dimension350 65// 同样的,面板 自己也有大小,设置面板的大小41.panel01.setBackgroundColor.white// 设置面板自身的背景颜色: 白 色(可自定义)42.43.44.JPanel panel02 new JPanel// 创建(实例化)第二个 JPanel 面板 对象:panel0245.panel02.setLayoutnew GridLayout4 6 5 5// 面板对象:panel02 采用网格布局法46.this.addpanel01 BorderLayout.NORTH// 将创建并定义好的面板放 置在窗体上47.this.addpanel02 BorderLayout.CENTER48.49.50.// ltltltltltltltltltltltltltltltltJTextField 文本框的创建与添加gtgtgtgtgtgtgtgtgtgtgtgtgt//51.JTextField txt new JTextField27// 创建(实例化)一个文本框 对象 txt52.txt.setTextquot0.quot// 设置文本框显示的字符串53.txt.setHorizontalAlignmentJTextField.RIGHT// 设置显示文本框 从右边开始显示字符串54.txt.setEditablefalse55.56.panel01.setLayoutnew FlowLayoutFlowLayout.RIGHT// 面板本身 也可以设置布局57.panel01.addtxt// 将文本框添加到 JPanel01 面板上58.59.// ltltltltltltltltltltltltltltltltJButton 按钮的创建与添加gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgt//60.JButton btn1 new JButtonquotBackspacequot// 实例化一个按钮对象 btn1,按钮上显示 Backspace61.JButton btn2 new JButtonquot CE quot// 同上62.JButton btn3 new JButtonquot C quot// 同上63.panel01.addbtn1// 将按钮添加到面板 panel01 上64.panel01.addbtn265.panel01.addbtn366.67.// 定义一个 array 数组,指定数组的每一个元素值(即计算器按钮上符 号的集群)68.String array quotMCquot quot7quot quot8quot quot9quot quot/quot quotsqrtquot quotMRquot quot4quot quot5quot69.quot6quot quotquot quotquot quotMSquot quot1quot quot2quot quot3quot quot-quot quot1/xquot quotMquot quot0quot70.quot/-quot quot.quot quotquot quotquot 71.// 使用循环 array 数组,并在循环中创建按钮对象72.for int i 0 i lt array.length i 73.// 创建对象,按钮上显示的文字从数组中获取74.JButton jbn new JButtonarrayi75.jbn.setFontnew FontquotArial Narrowquot Font.BOLD 1276.panel02.addjbn// 将创建的按钮放置到面板 panel02 上77.78.79.this.setDefaultCloseOperation3// 设置窗体关闭时退出程序80.this.setVisibletrue// 设置窗体对外可见(可显示出来)81.82.实现的效果如图: lt--EndFragment--gt 写报告期间重新写的,跟之前写的(开篇演示的第一幅图)效果存在一些参数上的差距,无论像不像,也请各位一笑而过,技术点在这就行了。
…………………………………………分割线……………………………………………… Part 2:颜色选择器的创建、鼠标动作监听器的创建与添加、绘制图形相应的方法的实现。
该部分的掌握源于简单画板的实现: lt--EndFragment--gt Color 按钮点击后所弹出的颜色选择界面:lt --EndFragment--gt 可实现选择颜色的使用和记忆存储…… (该颜色选择界面无需个人定义,为系统自带默认使用,功能已经很完善) 界面的绘制与之前的仿 Windows_XP 画图板类似,但更加简单(按钮数量少,布局单一,未加入文本框)简单画图板的实现只是为了实现监听、一些基本的传值和相应的图形绘制。
实现上述简单画板的代码如下: ltltltltltltltltltltltltltltltltltltltltltltltltlt画板界面创建类gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtJava 代码 1. import
java.awt.BorderLayout 2. import
java.awt.Color 3. import
java.awt.Dimension 4. import
java.awt.Graphics 5. import
java.awt.event.ActionEvent 6. import
java.awt.event.ActionListener 7. import
java.awt.event.MouseMotionListener 8. 9. import javax.swing.JButton 10.import javax.swing.JColorChooser 11.import javax.swing.JFrame 12.import javax.swing.JPanel 13. 14./ 15. 简单画图板程序类,该类继承自 JFrame 类 16. 17. author 吴少聪 18./ 19.public class Draw extends JFrame 20.// 将一些常用量定义成属性21.private String item quotLinequot// 默认画直线22.private Color color Color.BLACK// 默认使用的颜色为:黑色(可 自定义)23.24./25. 主函数部分26./27.public static void mainString args 28.// 创建对象:draw,并调用初始化界面的方法29.Draw draw new Draw30.draw.init31.32.33./34. 初始化界面的方法35./36.public void init 37.// 设置窗体的属性38.this.setTitlequot这是一个简单的画图板quot39.this.setSize600 50040.this.setDefaultCloseOperation341.this.setResizablefalse42.this.setLocationRelativeTonull43.44.// 创建(实例化)画图面板对象45.JPanel panel new JPanel46.panel.setBackgroundColor.white47.this.addpanel BorderLayout.CENTER48.49.// 创建简单的工具面板的对象50.ToolPanel tp new ToolPanel51.// 添加到窗体上,窗体默认的布局是边框布局 BorderLayout52.this.addtp BorderLayout.WEST// 将工具面板置于布局的 west 方位 (之前已经介绍过 BorderLayout 的布局方式)53.54.this.setVisibletrue// 窗体可视化55.// 面板上获取获取 Graphics 对象,用于相应图形的绘制56.// 技巧:要获取 Graphics 对象,必须在窗体可见之后,才可以获取到, 否则获取的是空值 null57.Graphics gh panel.getGraphics58.59.// 创建画图监听事件处理类对象:dl60.DrawListener dl new DrawListenergh this61.// 将创建好的鼠标监听器添加到面板上62.panel.addMouseListenerdl63.// 将创建好的接收组件上的鼠标移动事件的监听器添加到面板上64.panel.addMouseMotionListenerMouseMotionListener dl65.66.67.68./69. 定义一个内部类,此类用于创建一个简单的工具面板,继承自 JPanel 类70./71.class ToolPanel extends JPanel 72./73. 构造函数74./75.public ToolPanel 76.JPanel panel new JPanel// 实例化一个 JPanel 对象 panel77.panel.setPreferredSizenew Dimension100 200// 设置相应的大 小78.// panel.setBackgroundColor.BLUE79.80./81. 定义一个匿名内部类,此类用于创建一个动作监听器82./83.// 实例化一个动作监听器对象:al84.ActionListener al new ActionListener 85.// 事件处理方法86.public void actionPerformedActionEvent e 87.// 判断点击的是否是 color 按钮,如果是,则弹出一个颜色选择界面, 如果不是直接获取按钮上的文本值88.if e.getActionCommand.equalsquotColorquot 89.// 弹出界面,用户选择颜色,如果没有选择,返回 null.90.color JColorChooser.showDialognull quot选择颜色quot91.Color.BLACK92.System.out.printlncolor93. else 94.// 获取选择的图形95.item e.getActionCommand96.97.98.99.100.101. // 创建按钮 102. JButton btnLine new JButtonquotLinequot 103. JButton btnRect new JButtonquotRectquot 104. JButton btnOval new JButtonquotOvalquot 105. JButton btnCurve new JButtonquotCurvequot 106. JButton btnColor new JButtonquotColorquot 107. 108. // 添加按钮 109. panel.addbtnLine 110. panel.addbtnRect 111. panel.addbtnOval 112. panel.addbtnColor 113. panel.addbtnCurve 114. 115. // 往按钮上添加监听器 116. btnLine.addActionListeneral 117. btnRect.addActionListeneral 118. btnOval.addActionListeneral 119. btnColor.addActionListeneral 120. btnCurve.addActionListeneral 121. 122. // 将面板添加到窗体上 123. this.addpanel 124. 125. 126. 127. 128. // 根据动作得到要画图形的指令 129. public String getItem 130. return item 131. 132. 133. // 根据颜色选择界面的选择情况确定接下来绘制的颜色 134. public Color getColor 135. return color 136. 137. 138. gtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgtgt鼠标监听器与绘图类ltltltltltltltltltltltltltltltltltltltJava 代码 1. import
java.awt.Graphics 2. import
java.awt.event.MouseEvent 3. import
java.awt.event.MouseListener4.5. import javax.swing.event.MouseInputListener6.7. public class DrawListener implements MouseListener MouseInputListener 8.9. // 定义存储坐标值的变量10.private int x1 y1 x2 y211.// 定义一个画图形的对象12.private Graphics g13.// 获取图形和颜色的对象14.private Draw draw15.16./17. 定义带参数的构造函数18./19.public DrawListenerGraphics g Draw draw 20.this.g g21.this.draw draw22.23.24./25. 鼠标在事件源上按下时执行的方法26./27.public void mousePressedMouseEvent e 28.// 获.
上一篇:
基于java的web服务器毕业论文
下一篇:
bc80e7a0-d1f2-4595-b21d-01a76798e87a