好久没来给大家分享了,嘿嘿,上家公司没有网络,有心无力,最近找了一份新的工作,下周就去入职了,借这个让我高兴的时刻,再次给大家分享一个小demo,帮助大家对Java的绘图技术有更好的了解。
demo功能描述:
设置:1、对每个图形的画笔颜色、大小进行设置
2、对画板背景色进行设置(背景图片加上了缩放功能,拖动缩放和鼠标滚动缩放,为了让大家更好的看到功能,这里对背景图片大小做了设置,避免过大图片失真,缩放到了图片原始大小,就不再让其放大了)
圆形:1、点击此按钮之后,就可以在画板上拖动鼠标绘制圆形
2、绘制完图形之后点击鼠标左键,当前圆形会随着鼠标而移动
3、绘制完图形之后点击鼠标右键,对当前圆形进行个性化设置
三角:1、点击此按钮之后,就可以在画板上拖动鼠标绘制三角形
2、绘制完图形之后点击鼠标左键,当前三角形会随着鼠标而移动
3、绘制完图形之后点击鼠标右键,对当前三角形进行个性化设置
线条:1、点击此按钮之后,就可以在画板上拖动鼠标绘制直线
2、绘制完图形之后点击鼠标右键,对当前直线进行个性化设置
文字:1、点击此按钮之后,就可以在画板上拖动鼠标绘制文字
2、绘制完图形之后点击鼠标左键,当前文字会随着鼠标而移动
3、绘制完图形之后点击鼠标右键,对当前文字进行个性化设置
撤销:按照时间顺序将界面上图形都清除掉,但保留的有副本
回退:按照时间顺序将界面上图形都还原回来,需要依赖撤销时保留的副本
清屏:清除画板上所有图形,此时撤销和回退会失效
生成图片:将画板上绘制的图形,保存到本地文件夹
切换背景:改变背景图片,但是不会对背景色有影响
退出:退出系统
好了,还是先来说一下我的一些理解(其实在之前的分享中提到过一些,我再啰嗦一下)。
Java绘图,需要了解两个概念,画板和画笔。画板,大家简单理解为Jpanel这种组件;画笔,就是Java的Graphics对象。我们在画图的时候,就可以在图形对象里面获取到Graphics这个画笔,然后画圆画方想画什么画什么。绘图的机制就是鼠标动一下就重新绘制,所以会非常频繁的调用绘图API,这样,大家肯定能想到效率不高的问题,所以若是画图板之外的Swing程序,大家在UI方面还是尽量考虑使用图片会好一些。
可能大家对我所说的图形对象不是很了解,没关系,我们来看一个例子:圆形对象(就是画一个圆
)package com.jumao.itms.ui;
import java.awt.*;
/**
* 圆形
* @author SongFei
* @date 2015年8月6日
*/
public class Oval extends Shape {
private static final long serialVersionUID = 1L;
public Oval(Color color, float stroke, String type, int x, int y) {
super(color, stroke, type, x, y);
}
public void draw(Graphics2D graphics2d) {
// 设置画笔颜色
graphics2d.setColor(color);
// 设置画笔粗细
graphics2d.setStroke(new BasicStroke(stroke));
// 进行绘制
graphics2d.drawOval(currentX, currentY, currentD, currentD);
}
}
大家可以看到,这里面在构造方法里面对一个圆形的坐标进行了设置,真正绘图的时候只需要调用一下draw方法,这个方法需要一个Graphics2D参数,这时候大家似乎理解了吧,对,没错,这个就是画笔,就是画板的Graphics对象(画板是一个Jpanel组件)。
好了,说了这么多,给大家看看效果如何:
绘制图形可以拖动改变大小,改变位置,我这里只能对当前绘制的图形进行这些操作,没有对图形进行定位获取,嘿嘿,大家看看就好。
OK,东西没多少,感觉也没啥说的了,这里撤销、回退、缩放图片这些功能大家本地运行看看,截图看不明白。
嘿嘿,图形只选了几个常用图形,语言组织的也不太好,大家莫怪,之前的分享中对repaint、paintComponent这两个API详细讲解了一下,这次的分享对画板和画笔这两个理论性的东西讲解了一下,经过这两次,大家对Java的绘图有没有清楚一些了呢?