java画图应用程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

画图应用程序(JAVA)
摘要
Java语言已经成为了编程语言的骄子。

Java是一种简单的、面向对象的、分布式的、解释型的、健壮安全的、结构中立的、可移植的、性能优异、多线程的动态语言,非常实用。

我们可以看到,越来越多的大学在教授数据结构、程序设计和算法分析等课程时,渐渐的转向以Java语言为载体。

Java语言成为一种潮流,其跨平台开发和应用的优越性,使其在网络上被广泛的应用和开发。

学习利用Java编程也是比较实用的,其拥有很方便的图形界面等功能。

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。

学习了一学期的《Java面向对象编程》课程,利用我们所学的GUI图形用户界面等,来编写一个简单的画图应用程序。

实现一些比较简单的画图应用;如:画直线、曲线、矩形、椭圆、选择颜色、打开保存等基本功能。

关键字:Java ,画图,课程设计,编程
1、画图应用程序需求分析
需求分析是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。

可以说在软件工程当中的“需求分析”就是确定要计算机做什么。

利用Java语言编写一个简单的画图应用程序。

1.1、Java实现画图应用程序
学习了《Java面向对象编程》的课程,为了更进一步的提高我们对Java的深入学习,进行了一周的课程设计,我所选择课程设计是利用Java的GUI实现画图应用程度。

其目的是通过本课程设计使我们能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。

1.2、画图应用程序的综合要求
(1)程序功能需求
2)可绘制直线、曲线、椭圆、矩形;
3)可改变线条颜色;
4)可完成图形文件的保存、打开功能。

(2)程序性能需求
1)计算机硬件要求:P4以上微机。

2)计算机软件要求:安装Java的JDK6软件。

3)画图程序最终是在Windows操作系统上实现图形用户界面的窗口化。

(3)程序可靠性和可用性需求
画图应用程序的可靠性和可用性:即在选择了相应的画图应用程序按钮后其就能实现相应功能的作用。

比如:选择画笔按钮则可以随便画图;选择了直线按钮则实现画直线功能;选择了曲线按钮则实现画曲线的功能。

(4)程序出错处理需求
画图应用程序需要编写有相应的容错、调试等功能。

比如关闭是提醒保存;或当出现其它什么错误时可以抛出异常、程序调试、基本的容错等功能。

(5)程序运行需求
画图应用程序运行需求:在P4以上的计算机,在Windows操作系统上安装Java的JDK程序,并配置好相应的“环境变量”。

设置环境变量CLASSPATH 和PATH。

运行调试可以用windows系统自带的DOS中cmd.exe或破解版的“JCreator编辑器”、“EditPlus编辑器”等软件调试运行Java程序。

(6)程序将来可能提出的要求
功能要求:文字插入、编辑操作(复制、剪贴、拷贝),清除界面,撤销,橡皮擦,插入,修改错误等许多功能。

2、画图应用程序功能介绍
画图应用程序其实质也就是一个简单的画图板。

画图板的应用简单灵巧,其占用资源少、操作简单;可以实现一些简单的画图应用操作。

其功能较少但是可以为用户的小型图形应用工作带来了很多便利。

能实现简单的作图如:画直线、曲线、椭圆、矩形等;也可以实现图像保存、打开、选择颜色等功能。

3、画图应用程序分析设计
3.1 程序实现流程
(1)首先是了解画图应用程序的需求,进行程序的“需求分析”;在了解其需求基本上再作比较详细的程序规划。

(2)程序规划时需要建立所需文档资料,说明各个程序模块所要实现的功能是什么。

再深入了解和分析需求,举例出相关的界面和界面功能。

(3)根据确认的所需求文档列举的界面和功能需求,用迭代的方式对每个界面或功能做系统的概要设计。

(4)程序员根据所写的需求设计文档进行程序的代码编写,一个一个的实现其相应的编写。

(5)测试编写好的程序。

并补充和完善其相应的程序功能遗漏点,最后验收。

3.2 程序算法设计
(1)if…else…和for等语句进行判断其用户选择的相应的功能和现实相应的
循环,在调用选择的按钮键的功能。

(2)定义很多公共鼠标类监听鼠标的各种操作。

3.3 程序重点核心代码简介
(1)画图应用程序的“选择颜色”代码。

⏹先判断其用户是否选择“选择颜色”。

当用户选择了“选择颜色”则弹出选色界面对话框提供用户“选择颜色”。

if(e.getActionCommand().equals("选择颜色"))
{
JColorChooser jc=new JColorChooser();
linecolor=jc.showDialog(null, "请选择颜色", Color. BLACK);
lcolor.setForeground(linecolor);
}
(2)画图应用程序的“保存”和“打开”代码。

⏹先是判断选择“保存”或“打开”功能,再实现相应的功能。

if(e.getActionCommand().equals("保存"))
{ style=5;
JFileChooser sfc = new JFileChooser();
int flag=-1;
try { //这里将显示保存文件的对话框
flag=sfc.showSaveDialog(this);
}
catch(HeadlessException he)
{ System.out.println("Save File Dialog Exception!"); }
if(flag==JFileChooser.APPROVE_OPTION)
{//获取选择文件的路径
String filename = sfc.getSelectedFile().getPath();
try{ FileOutputStream fos=new FileOutputStream(filename);
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(thedraw);
oos.close();
}
{ System.out.println(es); }
}
}
else if(e.getActionCommand().equals("打开"))
{ style=5;
JFileChooser ofc = new JFileChooser();
int returnVal = ofc.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION)
{ String filename = ofc.getSelectedFile().getPath();
try{ //获取选择文件的路径
FileInputStream fis=new FileInputStream(filename);
ObjectInputStream ois=new ObjectInputStream(fis);
thedraw=(V ector<position>)ois.readObject();
ois.close();
}
catch(Exception es)
{ System.out.println(es); }
}
}
repaint();
}
(3)画图应用程序画图后鼠标“画图轨迹”记录存储。

public void mouseDragged(MouseEvent e)
{ // 记录画图轨迹
position p=new position();
p.x = e.getX();
p.y = e.getY();
p.type=style;
p.color=linecolor;
thedraw.add(p);
repaint();
}
3.4程序按钮功能核心代码列表
⏹画直线:Line2D t=new Line2D .Double(x1, y1, x2, y2);
⏹画矩形:Rectangle2D t=new Rectangle2D.Double(x1, y1, x2-x1, y2-y1);
⏹画曲线:Arc2D t=new Arc2D.Double(x1, y1, x2-x1, y2-y1,20,90,Arc2D.OPEN);
⏹画椭圆:Ellipse2D t=new Ellipse2D.Double(x1, y1, x2-x1, y2-y1);
4、画图应用程序测试
4.1 程序代码测试
(1)将编写好“画图应用程序”的源代码进行测试(源代码见附录)。

我安装的是Windows 7操作系统,安装的Java JDK是现在的最新版本,所使用的编辑调试器是破解版的JCreator V4。

将代码进行编译运行如下图:
由上图可以看出源代码已经通过编译,能够正常的运行程序。

(2)源代码成功通过编译后的运行结果,结果如下图:
上图为Java语言编程所实现的画图应用程序“用户界面”。

4.2 程序功能实现测试
(1)画图应用程序之画笔(直线、曲线、矩形、椭圆)功能实现,如下图标识:
“RGB”的颜色选择方式。

(3)画图应用程序之保存功能实现。

如下图:
将“三毛站岗”图保存到“桌面”。

(4)画图应用程序之打开功能实现。

如下图:
4.3 程序测试结果
(1)画图应用程序的Java源代码全部正确能够通过编译并正常运行。

(2)画图应用程序要求的功能:画直线、曲线、矩形、椭圆、保存、打开、画笔选择颜色等功能都以完全实现。

(3)通过Java编程完全实现了课程设计任务书的全部功能。

总结
通过此次Java课程设计,我自己学到了很多关于Java图形用户界面编写程序的基本知识。

对Java编程的总体结构也有新的认识。

我是比较喜欢编程的,觉得其实现某一个功能真的很神奇,我知道这全是利用数学知识来编写算法实现相应功能的,数学也我喜欢的科目。

但是我的英语水平很差很多单词记不住,所以编程多多少少带来了一定的困难,我渐渐的就不是很喜欢编程了而且编程很累。

在电脑旁边一坐就是一天时间过去了。

有时候人是逼出来的,经过一周的时间自己在网上查找相关代码,自己在慢慢的编写或改写代码,以实现Java语言的编程画图应用程序,从而使我有了更进一步对Java的学习和深入了解。

参考文献
[1] 孙卫琴. 《Java面向对象编程》. 电子工业出版社 2006
[1] 朱福喜. 《Java语言程序设计》(第二版). 科学出版社
[2] 陈国君等. 《Java程序设计基础》(第二版). 清华大学出版社
[3] Deitel. 《Java大学基础教程》(第六版). 电子工业出版社
[4] MaryCampione. 《Java语言导学》(第四版). 机械工业出版社
[5] Y.Daniel Liang. 《Java语言程序设计基础篇》(第六版). 机械工业出版社
[6] Kathy Sierra. 《Head First Java》(第二版). 东南大学出版社
附录:程序源代码及注释
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.io.* ;
import javax.swing.*;
import java.util.Vector;
// 定义监听窗口
public class DrawProject
{
public static void main(String[] args)
{
DrawFrame frame = new DrawFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
//图像界面的大小及调用
class DrawFrame extends JFrame
{
public static final int WIDTH = 800;
public static final int HEIGHT = 600;
public DrawFrame()
{
setTitle("JA V A画图本");
setSize(WIDTH, HEIGHT);
DrawPanel pane1 = new DrawPanel();
Container contentPane = getContentPane();
contentPane.add(pane1,"Center");
}
}
class position implements Serializable
{
int x;
int y;
int type;
Color color;
}
// 创建内部类作监视器
class DrawPanel extends JPanel implements ActionListener,MouseListener,MouseMotionListener
public JButton anj0,anj1,anj2,anj3,anj4,anj5,anj6,anj7,anj8; //按钮
JPanel jp; //工具栏
JLabel lcolor; //显示画笔颜色
Vector<position> thedraw= new Vector<position>(); //保存画图轨迹的数组int style=-1; //画图类型
int x1=0;int x2=0; //保存点的坐标
int y1=0;int y2=0; //保存点的坐标
Color linecolor=Color.BLACK; //线的颜色
public DrawPanel()
{
super();
this.setBackground(Color.WHITE);
this.setLayout(new BorderLayout());
//工具栏
jp=new JPanel();
jp.setBackground(Color.LIGHT_GRAY);
add(jp,BorderLayout.WEST);
jp.setLayout(new BoxLayout(jp,BoxLayout.Y_AXIS));
//加入工具栏的组件
lcolor = new JLabel(" ■■■■■■");
anj0=new JButton("画笔");
anj1=new JButton("矩形");
anj2=new JButton("椭圆");
anj3=new JButton("直线");
anj4=new JButton("曲线");
anj5=new JButton("保存");
anj6=new JButton("打开");
anj7=new JButton("清空");
anj8=new JButton("选择颜色");
// 工具栏顺序
jp.add(anj0); jp.add(anj3); jp.add(anj4);
jp.add(anj1); jp.add(anj2); jp.add(anj8);
jp.add(lcolor); jp.add(anj7); jp.add(anj5);
jp.add(anj6);
anj0.addActionListener(this); anj1.addActionListener(this);
anj2.addActionListener(this); anj3.addActionListener(this);
anj4.addActionListener(this); anj5.addActionListener(this);
anj6.addActionListener(this); anj7.addActionListener(this);
anj8.addActionListener(this); addMouseListener(this);
addMouseMotionListener(this);
}
// 记录鼠标选择的功能
public void actionPerformed(ActionEvent e)
if(e.getActionCommand().equals("画笔"))
style=0;
else if(e.getActionCommand().equals("矩形"))
style=1;
else if(e.getActionCommand().equals("椭圆"))
style=2;
else if(e.getActionCommand().equals("直线"))
style=3;
else if(e.getActionCommand().equals("曲线"))
style=4;
else if(e.getActionCommand().equals("清空"))
{
thedraw.removeAllElements();
style=7;
}
else if(e.getActionCommand().equals("选择颜色"))
{
JColorChooser jc=new JColorChooser();
linecolor=jc.showDialog(null, "请选择颜色", Color. BLACK);
lcolor.setForeground(linecolor);
}
else if(e.getActionCommand().equals("保存"))
{
style=5;
JFileChooser sfc = new JFileChooser();
int flag=-1;
try{
flag=sfc.showSaveDialog(this);
//这里将显示保存文件的对话框
}
catch(HeadlessException he)
{
System.out.println("Save File Dialog Exception!");
}
if(flag==JFileChooser.APPROVE_OPTION)
{
String filename = sfc.getSelectedFile().getPath();
//获取选择文件的路径
try{
FileOutputStream fos=new FileOutputStream(filename);
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(thedraw);
oos.close();
}catch(Exception es){
System.out.println(es);
}
}
}
else if(e.getActionCommand().equals("打开"))
{
style=5;
JFileChooser ofc = new JFileChooser();
int returnVal = ofc.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION) {
String filename = ofc.getSelectedFile().getPath();
//获取选择文件的路径
try{
FileInputStream fis=new FileInputStream(filename);
ObjectInputStream ois=new ObjectInputStream(fis);
thedraw=(Vector<position>)ois.readObject();
ois.close();
}
catch(Exception es){
System.out.println(es);
}
}
}
repaint();
}
//从数组中取出一个点后画图
public void draw(Graphics2D g)
{
int n=thedraw.size();
position p;
for(int i=0;i<n;i++)
{
try
{
p=thedraw.get(i);
if(p.type==0)
{
x1=x2=p.x;
y1=y2=p.y;
while(p.type==0)
{
x2=p.x;
y2=p.y;
Line2D t=new Line2D.Double(x1, y1, x2, y2);
g.setColor(p.color);
g.draw(t);
i++;
if(i==n){
i--;
break;
}
p=thedraw.get(i);
x1=x2;
y1=y2;
}
}
if(p.type==1)
{
x1=p.x;
y1=p.y;
i++;
p=thedraw.get(i);
x2=p.x;
y2=p.y;
if(x2<x1)
{
int temp;
temp=x1;
x1=x2;
x2=temp;
}
if(y2<y1)
{
int temp;
temp=y1;
y1=y2;
y2=temp;
}
if(p.type==1)
{
Rectangle2D t=new Rectangle2D.Double(x1, y1, x2-x1, y2-y1);
g.setColor(p.color);
g.draw(t);
thedraw.remove(i);
}
else if(p.type==-1)
{
Rectangle2D t=new Rectangle2D.Double(x1, y1, x2-x1, y2-y1);
g.setColor(p.color);
g.draw(t);
}
else i--;
}
if(p.type==2)
{
x1=p.x;
y1=p.y;
i++;
p=thedraw.get(i);
x2=p.x;
y2=p.y;
if(x2<x1)
{
int temp;
temp=x1;
x1=x2;
x2=temp;
}
if(y2<y1)
{
int temp;
temp=y1;
y1=y2;
y2=temp;
}
if(p.type==2)
{
Ellipse2D t=new Ellipse2D.Double(x1, y1, x2-x1, y2-y1);
g.setColor(p.color);
g.draw(t);
thedraw.remove(i);
}
else if(p.type==-1)
{
Ellipse2D t=new Ellipse2D.Double(x1, y1, x2-x1, y2-y1);
g.setColor(p.color);
g.draw(t);
}
else i--;
}
if(p.type==3)
{
x1=p.x;
y1=p.y;
i++;
p=thedraw.get(i);
x2=p.x;
y2=p.y;
if(p.type==3)
{
Line2D t=new Line2D .Double(x1, y1, x2, y2);
g.setColor(p.color);
g.draw(t);
thedraw.remove(i);
}
else if(p.type==-1)
{
Line2D t=new Line2D .Double(x1, y1, x2, y2);
g.setColor(p.color);
g.draw(t);
}
else i--;
}
if(p.type==4)
{
x1=p.x;
y1=p.y;
i++;
p=thedraw.get(i);
x2=p.x;
y2=p.y;
if(x2<x1)
{
int temp;
temp=x1;
x1=x2;
x2=temp;
}
if(y2<y1)
{
int temp;
temp=y1;
y1=y2;
y2=temp;
}
if(p.type==4)
{
Arc2D t=new Arc2D.Double(x1, y1, x2-x1, y2-y1,20,90,Arc2D.OPEN);
g.setColor(p.color);
g.draw(t);
thedraw.remove(i);
}
else if(p.type==-1)
{
Arc2D t=new Arc2D.Double(x1, y1, x2-x1, y2-y1,20,90,Arc2D.OPEN);
g.setColor(p.color);
g.draw(t);
}
else i--;
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if(style==-1)return;
else draw((Graphics2D)g);
}
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mousePressed(MouseEvent e)
{ // 记录画图轨迹
position p=new position();
p.x = e.getX();
p.y = e.getY();
p.type=style;
p.color=linecolor;
thedraw.add(p);
}
public void mouseExited(MouseEvent e) { }
public void mouseReleased(MouseEvent e)
{ // 记录画图轨迹
position p=new position();
p.x = e.getX();
p.y = e.getY();
p.type=-1;
p.color=linecolor;
thedraw.add(p);
repaint();
}
public void mouseMoved(MouseEvent e) { } public void perdraw() { }
public void mouseDragged(MouseEvent e)
{ // 记录画图轨迹
position p=new position();
p.x = e.getX();
p.y = e.getY();
p.type=style;
p.color=linecolor;
thedraw.add(p);
repaint();
}
}。

相关文档
最新文档