王霏 侯伟冬
摘要:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java技术具有卓越的通用性、高效性、平台移植性和安全性。该文基于JAVA语言,在介绍JAVA概念的基础上,实现了图像生成器的简单设计,通过运行程序,可以绘制各种图形,并且可以对图形进行预览、保存等操作。
关键词:JAVA;面向对象;图像生成
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)20-4889-03
JAVA-based Image Generator Design and Implementation
WANG Fei, HOU Wei-dong
(The Baicheng Medical College, Baicheng 137000,China)
Abstract: Java is a cross-platform application software can write object-oriented programming language. Java technology offers excellent versatility, efficiency, platform portability, and security. This paper is based on the JAVA programming language, introduced the JAVA con cept to achieve a simple design of the image generator to run the program, you can draw a variety of graphics and graphics preview, save, and other operations.
Key words: JAVA; object-oriented; image generation
1 JAVA概述
Java是一种完全面向对象的编程语言,既是一种解释执行的语言,也是一种编译执行的语言。Java可用来生成两类程序:应用程序、小应用程序(Applet)。JAVA主要具有几个特点:
1)简单:屏弃了C++中许多容易出错和混淆的概念,比如指针、运算符重载、多重继承等。Java还通过实现自动垃圾回收机制而大大简化了程序设计人员对内存的管理工作,减少了错误的发生。
2)面向对象:基于对象的编程更符合人的思维模式,使人们更容易编写程序。
3)多线程:Java内置了对多线程的支持。多线程使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。
4)平台无关性:也就是常说的跨平台。Java程序被编译成字节码的形式,在有Java虚拟机的系统上就能够运行java程序。也就是一次写成,处处运行。
5)动态性:Java的基本组成单元是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态加载的,这就使得Ja va可以在分布计算功能中动态的维护程序及类库,而不像C++那样,每当类库升级之后,相应的程序都必须重新修改,编译。
Java和C++的区别主要有以下几点:1)Java屏弃了烦琐的指针;2)Java不支持预处理功能;3)Java不支持多重继承;4)Java不支持操作符重载;5)自动内存管理;6)方便的字符串功能;7)强大的异常处理机制。
2设计内容
该文基于JAVA语言,在介绍JAVA概念的基础上,实现了图像生成器的简单设计。图像生成器具有绘制直线、空心圆、实心圆、空心矩形、实心矩形、空心圆角矩形、实心圆角矩形、空心椭圆、实心椭圆等各种图形,具有橡皮擦、选择线条粗细及线条颜色在当前光标处插入文字、设置字号字形等工具,可以打开、保存、预览图形文件,获取当前屏幕在绘图区域显示,可以设置窗口的风格,状态栏上显示当前鼠标的位置及系统当前时间。
通过设计,可以达到几下要求:
1)用户可选择对应图形按钮绘制对应图形也可以随意画,可以任意改变线条的粗细及线条颜色,插入自己满意的字号字形的文字,画好后可以保存为.MP文件。
2)对于自己画错或不满意的地方可以用橡皮擦擦除,橡皮擦的擦拭范围的宽窄可以改变。
3)可以打开及保存MP文件、预览图形文件。
4)通过选择相应的窗口风格选项来改变当前窗口的显示风格。
5)通过视图工具栏的工具栏的相应选取项来控制常用工具栏、绘图工具栏及状态栏的显示与否。
6)可以获取屏幕的内容在当前绘图区域显示。
3总体设计
3.1图像生成器窗体的设计
在设计的Making picture窗口中使用的是BorderLayout布局菜单栏上有文件、视图、设置、风格、帮助菜单项。在菜单项下是常用工具栏,常用工具栏上有新建、打开、保存、获取屏幕、清除、绘制图形、插入文字及文字的字号、字形的按钮,窗口的左边是绘图工具栏,上面有铅笔、直线、、空心圆、实心圆、空心矩形、实心矩形、空心圆角矩形、实心圆角矩形、空心椭圆、实心椭圆、橡皮擦、选择线条粗细及线条颜色的按钮,窗口最下面是状态栏,状态栏的左边显示当前鼠标的状态和位置,右边显示系统当前时间。鼠标指到常用工具栏和绘图工具栏上的相就按钮上时有相应的提示。窗口中间是绘图区域以白色为背景。
3.2相应功能设计
4程序主要源代码及说明
因篇幅有限,截取部分源代码如下:
class Line extends drawings //直线类
{void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke,
BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL));
g2d.drawLine(x1,y1,x2,y2);}}
class Rect extends drawings//矩形类
{ void draw(Graphics2D g2d)
{g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.drawRect(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x1-x2),Math.abs(y1-y2));
}}
……
class DrawPanel extends JPanel
{ BufferedImage scrImg = null; public DrawPanel()
{setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
setBackground(Color.white);//设置绘图区域背景为白色
addMouseListener(new mouseA());//监听鼠标相应事件操作
addMouseMotionListener(new mouseB());//用来监听鼠标拖动和鼠标移动时的相应操作} public void drawScreen()//定义获取当前屏幕的方法
{ Robot robot= null;//定义Robot对象以调用Robot.createScreenCapture方法RectanglescrRect= null; Graphics g = this.getGraphics(); try
{robot = new Robot();
Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();//桌面屏幕尺寸
scrRect = new Rectangle(0, 0, scrSize.width, scrSize.height);
scrImg = robot.createScreenCapture(scrRect);
}catch (Exception ex)
{ JOptionPane.showMessageDialog(frame," " + ex.toString());}
if (scrImg != null)
{int iWidth = this.getWidth();
int iHeight = this.getHeight();
g.drawImage(scrImg, 0, 0, iWidth, iHeight, 0, 0, scrImg.getWidth(),
scrImg.getHeight(), null);//在绘图区域显示当前屏幕的图象
}g.dispose();
}protected void paintComponent(Graphics g)
{super.paintComponent(g);
Graphics2D g2d=(Graphics2D)g;//定义画笔
int j=0;
if (scrImg != null)
{ int iWidth = this.getWidth();
int iHeight = this.getHeight();
g.drawImage(scrImg, 0, 0, iWidth, iHeight, 0, 0, scrImg.getWidth(),
scrImg.getHeight(),null);
} while (j<=index)
{draw(g2d,itemList[j]);
j++;
} }
void draw(Graphics2D g2d,drawings i)
{i.draw(g2d);//将画笔传入到各个子类中,用来完成各自的绘图}}
5程序效果显示图
绘制各种图形界面如图1所示。
图1
打开文件界面如图2所示。
图2
保存文件界面如图3所示。
改变颜色界面如图4所示。
6结束语
该文实现了图像生成器的基本功能,通过实验程序运行良好,达到了预期效果。
参考文献:
[1] Deitel H M, Deitel P J.Java程序设计教程[M].5版.施平安,施惠琼,柳赐佳,译.北京:清华大学出版社,2004.
[2]布雷.java2精要语言详解与编程指南[M].北京:清华大学出版社,2002.
[3]青野雅树.基于Java的计算机图形学[M].北京:科学出版社,2004.