这学期从零开始接触JAVA,最近做了第一个简单小程序XP版画图板,写一篇日志,既算是记录我JAVA学习的脚步,也算是对画图板开发的总结。
标题我写了画图板的设计思路和总结,其实说是设计思路,不如说在编写过程中必然会遇到的问题的解决顺序。首先需要建立一个画图板窗体,并在上面添加各种工具栏,菜单栏,按钮以及设定可绘制区域。然后通过给各个组件加上监听器来实现各种功能
一、窗体框架 界面设计
这个貌似没什么好说的,JFrame建立窗体,根据用途差异在窗体上加上几个不同大小和位置的JToolBar和JPanel,然后在上面加上按钮,按钮图标等比较多的时候,可以通过命名规则的控制循环添加组件。通过布局和诸如setBorder(new BevelBorder()等简单操作可以给界面带来很大程度的美化。
以下是一段较典型的添加并设置组件的代码示例:
//创建中间面板
javax.swing.JPanel centre = new MyPanel();
//设置中间画板背景颜色
centre.setBackground(java.awt.Color.GRAY);
//设置布局
FlowLayout fl = new FlowLayout(FlowLayout.LEFT,1,1);
centre.setLayout(fl);
//创建画布对象
javax.swing.JPanel drawPanel = new javax.swing.JPanel();
//设置大小
drawPanel.setPreferredSize(new Dimension(500,350));
//设置画布背景颜色
drawPanel.setBackground(java.awt.Color.WHITE);
centre.add(drawPanel);
二、监听器
要实现窗体界面上各个组件的设计功能,就必须在相应组件上加上监听器,并在监听器中写入方法,则相应事件发生时能激发预设的方法完成功能和操作。
我们可以新建一个监听器类,也可以直接写一个匿名内部监听器类。
监听器部分的难点主要是对象的传递,可能是习惯不好,我之前经常因为这个问题导致空指针错误。
三、重绘
要使窗体最小化后打开等操作后画板上依然显示相同图案和数据,我们使用了重绘。
重绘的方法我们学了三种:队列,数组,还有一种数组的优化
队列重绘:构造以shape为父类,line等图形对象类为子类的继承体系,定义动态数组存储图像类对象,使用抽象类来实现诸如line等具有相同性质即都属于形状但又不同的类的存储和绘制。
抽象类与接口的理解:
二维数组重绘:先创建二维数组用于存储各点颜色,用Robot类createScreenCapture截屏,返回一个BufferedImage对象,然后用该对象的getRGB(j, i)方法得到该点颜色,存入二维数组。在paint方法中遍历取点并绘制即可。 用同样方法可以实现取色笔的取色。
以下为二维数组重绘即优化的代码:
public void paint(java.awt.Graphics g) {
// 调用父类的方法来正确的绘制组件,super的使用
super.paint(g);
//第三种重绘方法,直接用image重绘
//if (dlis != null && dlis.img != null) {
// g.drawImage(dlis.img, 0, 0, dlis.img.getWidth(),
// dlis.img.getHeight(), null);
// }
//第二种重绘方法,二维数组保存并遍历,缺点是每个点需计算一遍比较慢
if (dlis != null&&dlis.area!=null) {
// 遍历二维数组
for (int i = 0; i < dlis.area.length; i++) {
for (int j = 0; j < dlis.area[i].length; j++) {
// 取出颜色
int cNum = dlis.area[i][j];
//如果存储的颜色与背景色不一样,就绘制一次
if(cNum!=this.getBackground().getRGB()){
// 将数字转成Color对象
Color color = new Color(cNum);
// 绘制这个点
g.setColor(color);
g.drawLine(j, i, j, i);
}
}
}
}
四、部分组件实现
诸如直线、矩形、椭圆之类直接调用方法即可,而铅笔、刷子、橡皮是给直线设置颜色、粗细,并使用MouseMotionListener接口中的mouseDragged方法来实现。取色笔先用robot.createScreenCapture() getRGB(j, i)取色然后绘制即可,矩形剪裁同样用robot.createScreenCapture()截屏,保存,然后通过鼠标监听器得到鼠标横纵坐标改变量,先将截屏矩形区绘为白色,再将保存的图像放到新位置(顺序不能倒,因为新位置和截屏区可能重叠),写字功能通过布尔变量(也可以用计数器)和if语句判断是否已写字然后 对象.add和对象.remove 来实现文本框的出现和消失。放大镜先通过e.getSource()获得对象,然后得到对象原本大小,重新setPreferredSize,放大倍数几倍就设置新大小为原大小几倍,然后用updateUI刷新即可,然后曲线据说是用贝塞尔曲线可以做,目前还没试过.....
五、其他
完成这个小程序的收获主要在于一方面养成了一些编程习惯,比如注释,详细的注释对于整体的思路,错误的查找修正都很有帮助。另一方面对一些编程技巧,关键字super,final之类还有接口 抽象类 类等有了更多的理解。
分享到:
相关推荐
总结,Windows画图板以其简单易用和功能丰富的特点,成为了日常生活中进行动态画图的得力助手。无论是儿童学习绘画,还是成年人进行快速草图设计,它都能提供一个便捷的平台。通过对画图板的深入理解和熟练运用,...
总结来说,QT画图板是一个很好的学习案例,涵盖了Qt GUI编程中的许多核心概念和技术,包括图形渲染、事件处理、用户交互和数据持久化等。通过学习和实践这个项目,你可以提升对Qt框架的理解,为开发更复杂的应用程序...
在Java学习过程中,创建一个简单的画图板是一个经典的练习项目,它可以帮助我们深入理解图形用户界面(GUI)的构建和事件处理机制。本篇小结将聚焦于如何使用Java实现一个基本的画图板,同时提供相关的源码分析。 1...
在本文档中,我们将探讨如何使用QtCreator来编写一个画图板程序。画图板是一个基础且功能丰富的应用,常常作为学习图形用户界面(GUI)编程的一个入门项目。本文将重点介绍Qt的GUI框架、主要组件以及编程概念。 ###...
总结起来,"canvas 画图板.zip" 提供了一个基于 HTML5 Canvas 的简易在线画图工具实现。通过解析 HTML、CSS 和 JavaScript 文件,我们可以了解如何利用 Canvas API 创建交互式的画图板,包括监听鼠标事件、绘制线条...
总结来说,“学生制作的画图板”不仅仅是一个简单的绘图软件,它更是一个知识共享和技术合作的平台。它通过提供一个简单易用的画图环境,帮助学生更好地完成作业,激发他们的创造力。同时,它也鼓励学生们在技术领域...
总结,实现一个画图板涉及多个Java Swing组件和事件处理机制的理解。通过这个过程,开发者可以深入学习GUI编程,以及图形绘制和交互设计的基本原理。对于初学者,这是一个很好的练习项目,能帮助他们更好地掌握Java...
总结,这个“virtual c++6.0 mfc简易画图板”项目充分展示了MFC在图形界面编程中的应用,通过MFC的类和方法,实现了类似Windows画图板的基本功能。通过学习和实践此类项目,开发者可以深入理解MFC的工作原理,提高...
总结来说,这个"画图板代码"项目涵盖了事件处理、图形绘制、图形状态管理和用户交互设计等多个核心编程概念,是学习和实践GUI编程的一个良好起点。通过深入研究和实践,开发者可以进一步提升在图形用户界面开发领域...
总结来说,这个"用VC编的画图板程序"是一个利用MFC和可能的GDI/GDI+技术实现的图形应用程序,它的开发涉及到C++编程、GUI设计、事件处理、图形绘制等多个方面。对于想要深入理解VC开发和图形编程的用户,这是一个很...
总结起来,一个强大的画图板不仅是一个简单的绘图工具,更是创意表达、协同工作和知识传递的重要平台。它在技术博客中扮演着不可或缺的角色,帮助作者以更直观的方式传达复杂的技术概念。无论你是设计师、教师、学生...
总结,"类似于画图板的小程序"是一个综合性的C#项目,涵盖了图形用户界面设计、事件处理、图形绘制、文件操作等多个知识点,对于学习C#编程和理解Windows应用程序开发流程具有很大的实践价值。通过分析和实践这个...
总结起来,创建一个C#画图板涉及到Windows Forms应用程序的基础知识,图形绘制API的使用,以及鼠标事件的处理。这个项目不仅有助于理解C#编程,还能加深对图形用户界面设计的理解。通过不断迭代和添加更多功能,如...
在Java编程语言中,画图板(Canvas)是图形用户界面(GUI)开发的一个关键组件。它是Java AWT(Abstract Window Toolkit)库的一部分,用于在窗口上绘制图形。Canvas类继承自Component,允许程序员直接在屏幕上进行...
总结来说,这个【Java画图板系统】项目展示了如何使用Java GUI技术来创建一个交互式的绘图应用。通过Eclipse IDE,开发者可以方便地管理、编译和调试代码,确保在不同JDK版本下的一致性。对于学习和理解Java GUI编程...
总结来说,这个C#的简单画图板源码涉及了C#的基础语法、Windows Forms开发、图形绘制、事件处理、颜色选择等核心概念。对于初学者来说,这是一个很好的实践项目,能帮助他们深入理解和掌握这些关键知识点。通过分析...
总结来说,"画图板C++写的代码" 是一个很好的学习资源,它展示了如何使用C++和Windows API或MFC来创建一个功能丰富的图形应用程序。这个项目涵盖了图形绘制、用户交互、文件操作等多个关键领域,对于想要深入学习C++...
### VC++画图板设计与实现 #### 一、项目背景及目标 本课程设计的主要目的是让学生通过实际操作,深入理解和掌握使用Visual C++ (VC++) 开发环境进行软件开发的基本方法和技术。通过本项目的实践,学生将能够熟悉...