JAVA画图板程序实验报告附完整代码分析.docx

上传人:b****8 文档编号:9053106 上传时间:2023-02-03 格式:DOCX 页数:26 大小:406.59KB
下载 相关 举报
JAVA画图板程序实验报告附完整代码分析.docx_第1页
第1页 / 共26页
JAVA画图板程序实验报告附完整代码分析.docx_第2页
第2页 / 共26页
JAVA画图板程序实验报告附完整代码分析.docx_第3页
第3页 / 共26页
JAVA画图板程序实验报告附完整代码分析.docx_第4页
第4页 / 共26页
JAVA画图板程序实验报告附完整代码分析.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

JAVA画图板程序实验报告附完整代码分析.docx

《JAVA画图板程序实验报告附完整代码分析.docx》由会员分享,可在线阅读,更多相关《JAVA画图板程序实验报告附完整代码分析.docx(26页珍藏版)》请在冰豆网上搜索。

JAVA画图板程序实验报告附完整代码分析.docx

JAVA画图板程序实验报告附完整代码分析

画板程序

一、软件系统分析和设计方案

1、功能需求分析

设计类似于Windows画板的程序,程序可以通过功能菜单(或工具条)进行功能选择操作,在画板中可以用鼠标操作绘制不同颜色的点,直线,多边形和椭圆,可以保存和打开自定义的图形文件。

2、结构设计过程

经过对需求的分析,我们设计的画图板界面主要包括菜单栏、工具栏、画板三个部分。

菜单栏包含文件、编辑、帮助等常见功能菜单,实现打开保存文件等功能;工具栏主要包括画笔、矩形、椭圆、直线、刷子、橡皮、文字、颜色等工具,可完成一些基本操作;画板能够编辑处理图片及文字。

而代码实现上采用面向对象的思想,将上述组件封装与一个画板类中布局并实现功能;通过一个窗框类实现画板对象;最后在主类中建立窗框对象。

思路如下图:

 

二、软件实现和代码编写

具体代码及详细注释如下:

importjava.awt.*;

importjava.awt.event.*;

importjava.awt.geom.*;

importjavax.swing.*;

importjavax.swing.UIManager.*;

importjava.io.*;

importjava.util.Vector;

//主类建立窗框

publicclassDrawPad{

publicstaticvoidmain(String[]args){

try{//优化UI效果

for(LookAndFeelInfoinfo:

UIManager.getInstalledLookAndFeels()){

if("Nimbus".equals(info.getName())){

UIManager.setLookAndFeel(info.getClassName());

break;

}

}

}catch(Exceptione){

System.out.println(e);

}

newDrawFrame();

}

}

//添加窗口和画板组件

classDrawFrameextendsJFrame{

publicDrawFrame(){

DrawPanelpanel=newDrawPanel();

add(panel);

setTitle("简单JAVA画板");

setBounds(100,100,800,600);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

//定义绘画点的基本属性

classpositionimplementsSerializable{

intx;

inty;

inttype;

Strings;

Colorcolor;

}

//定义画板组件

classDrawPanelextendsJPanelimplementsActionListener,MouseListener,

MouseMotionListener{

JMenuBarmb;//菜单栏

JMenumenu1,menu2,menu3;

JMenuItemi1,i2,i3,i4;

JPaneljp1;//工具栏

publicJButtonanj0,anj1,anj2,anj3,anj4,anj5,anj6,anj7,anj8,anj9,

anj10;

JLabell1,lcolor;

Vectorthedraw=newVector();//保存画图轨迹的数组

intstyle=0;//保存画图类型,默认为画笔

intx1=0;//保存点的坐标

intx2=0;

inty1=0;

inty2=0;

Stringinput="";//默认输入文字内容

Colorlinecolor=Color.BLACK;//默认线的颜色

publicDrawPanel(){

setBackground(Color.WHITE);

setLayout(newBorderLayout());

setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

//上部菜单栏

mb=newJMenuBar();

mb.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));

add(mb,BorderLayout.NORTH);

//加入菜单栏的组件

menu1=newJMenu("文件");

menu2=newJMenu("编辑");

menu3=newJMenu("帮助");

i1=newJMenuItem("打开",newImageIcon(

"img/open.png"));

i2=newJMenuItem("保存",newImageIcon(

"img/save.png"));

i3=newJMenuItem("清空",newImageIcon(

"img/clear.png"));

i4=newJMenuItem("关于简单JAVA画板",newImageIcon(

"img/about.png"));

menu1.add(i1);

menu1.addSeparator();

menu1.add(i2);

menu2.add(i3);

menu3.add(i4);

mb.add(menu1);

mb.add(menu2);

mb.add(menu3);

add(mb,BorderLayout.NORTH);

//侧边工具栏

jp1=newJPanel();

jp1.setBackground(Color.LIGHT_GRAY);

jp1.setLayout(newBoxLayout(jp1,BoxLayout.Y_AXIS));

jp1.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));

add(jp1,BorderLayout.WEST);

//加入工具栏的组件

anj0=newJButton("画笔",newImageIcon("img/pen.png"));

anj1=newJButton("刷子",newImageIcon("img/brush.png"));

anj2=newJButton("橡皮",newImageIcon("img/erease.png"));

anj3=newJButton("文字",newImageIcon("img/word.png"));

anj4=newJButton("直线",newImageIcon("img/sline.png"));

anj5=newJButton("矩形",newImageIcon("img/rec.png"));

anj6=newJButton("圆矩",newImageIcon("img/frec.png"));

anj7=newJButton("椭圆",newImageIcon("img/eli.png"));

anj10=newJButton("");

lcolor=newJLabel("■");//会变色的方块

l1=newJLabel("颜色");

anj10.add(lcolor);

anj10.add(l1);

jp1.add(anj0);

jp1.add(anj1);

jp1.add(anj2);

jp1.add(anj3);

jp1.add(anj4);

jp1.add(anj5);

jp1.add(anj6);

jp1.add(anj7);

jp1.add(anj10);

//事件处理

i1.addActionListener(this);

i2.addActionListener(this);

i3.addActionListener(this);

i4.addActionListener(this);

anj0.addActionListener(this);

anj1.addActionListener(this);

anj2.addActionListener(this);

anj3.addActionListener(this);

anj4.addActionListener(this);

anj5.addActionListener(this);

anj6.addActionListener(this);

anj7.addActionListener(this);

anj10.addActionListener(this);

addMouseListener(this);

addMouseMotionListener(this);

}

//记录鼠标选择的功能

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==anj0)

style=0;

elseif(e.getSource()==anj1)

style=1;

elseif(e.getSource()==anj2)

style=2;

elseif(e.getSource()==anj3){

style=3;

input=JOptionPane.showInputDialog("输入文字后在画板上点击放置");

}elseif(e.getSource()==anj4)

style=4;

elseif(e.getSource()==anj5)

style=5;

elseif(e.getSource()==anj6)

style=6;

elseif(e.getSource()==anj7)

style=7;

elseif(e.getSource()==anj10){

linecolor=JColorChooser.showDialog(null,"请选择颜色",Color.BLACK);

lcolor.setForeground(linecolor);

}elseif(e.getActionCommand()

.equals("关于简单JAVA画板")){

JOptionPane.showMessageDialog(null,

"这是一个简单的JAVA画板。

\n开发者:

B13070630\n2014年12月于南邮","关于",

JOptionPane.INFORMATION_MESSAGE);

}elseif(e.getActionCommand().equals("清空")){

thedraw.removeAllElements();

}elseif(e.getActionCommand().equals("保存")){

JFileChoosersfc=newJFileChooser();

intflag=-1;

//显示保存文件的对话框

try{

flag=sfc.showSaveDialog(this);

}catch(HeadlessExceptionhe){

System.out.println("SaveFileDialogException!

");

}

//获取选择文件的路径

if(flag==JFileChooser.APPROVE_OPTION){

Stringfilename=sfc.getSelectedFile().getPath();

try{

FileOutputStreamfos=newFileOutputStream(filename);

ObjectOutputStreamoos=newObjectOutputStream(fos);

oos.writeObject(thedraw);

oos.close();

}catch(Exceptiones){

System.out.println(es);

}

}

}elseif(e.getActionCommand().equals("打开")){

JFileChooserofc=newJFileChooser();

intflag=-1;

try{

flag=ofc.showOpenDialog(this);

}catch(HeadlessExceptionhe){

System.out.println("SaveFileDialogException!

");

}

//获取选择文件的路径

if(flag==JFileChooser.APPROVE_OPTION){

Stringfilename=ofc.getSelectedFile().getPath();

try{

FileInputStreamfis=newFileInputStream(filename);

ObjectInputStreamois=newObjectInputStream(fis);

thedraw=(Vector)ois.readObject();

ois.close();

}catch(Exceptiones){

System.out.println(es);

}

}

}

repaint();//刷新画板

}

//paintComponent方法调用绘制方法使在容器内绘制而不超出容器

publicvoidpaintComponent(Graphicsg){

super.paintComponent(g);

draw((Graphics2D)g);

}

//从数组中取出一个点后画图

publicvoiddraw(Graphics2Dg){

intn=thedraw.size();

positionp;

for(inti=0;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;

Line2Dt=newLine2D.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){//刷子

while(p.type==1){

g.setColor(p.color);

g.drawString("●",p.x,p.y);//采用字符使点变大

i++;

if(i==n){

i--;

break;

}

p=thedraw.get(i);

}

}

if(p.type==2){//橡皮

while(p.type==2){

g.setColor(Color.WHITE);

g.drawString("■",p.x,p.y);//采用字符使点变大

i++;

if(i==n){

i--;

break;

}

p=thedraw.get(i);

}

}

if(p.type==3){//文字

while(p.type==3){

g.setColor(p.color);

g.drawString(p.s,p.x,p.y);//点状绘制实时字符

i++;

if(i==n){

i--;

break;

}

p=thedraw.get(i);

}

}

if(p.type==4){//直线

x1=p.x;

y1=p.y;

i++;

p=thedraw.get(i);

x2=p.x;

y2=p.y;

if(p.type==4){//不存在翻转问题,故不用交换坐标

Line2Dt=newLine2D.Double(x1,y1,x2,y2);

g.setColor(p.color);

g.draw(t);

thedraw.remove(i);

}elseif(p.type==-1){

Line2Dt=newLine2D.Double(x1,y1,x2,y2);

g.setColor(p.color);

g.draw(t);

}else

i--;

}

if(p.type==5){//矩形

x1=p.x;

y1=p.y;

i++;

p=thedraw.get(i);

x2=p.x;

y2=p.y;

if(x2

inttemp;

temp=x1;

x1=x2;

x2=temp;

}

if(y2

inttemp;

temp=y1;

y1=y2;

y2=temp;

}

if(p.type==5){//鼠标按下则动态变化

Rectangle2Dt=newRectangle2D.Double(x1,y1,x2-x1,

y2-y1);

g.setColor(p.color);

g.draw(t);

thedraw.remove(i);

}elseif(p.type==-1){//鼠标松开则固定绘图

Rectangle2Dt=newRectangle2D.Double(x1,y1,x2-x1,

y2-y1);

g.setColor(p.color);

g.draw(t);

}else

i--;

}

if(p.type==6){//圆角矩形

x1=p.x;

y1=p.y;

i++;

p=thedraw.get(i);

x2=p.x;

y2=p.y;

if(x2

inttemp;

temp=x1;

x1=x2;

x2=temp;

}

if(y2

inttemp;

temp=y1;

y1=y2;

y2=temp;

}

if(p.type==6){

RoundRectangle2Dt=newRoundRectangle2D.Double(x1,

y1,x2-x1,y2-y1,20,20);

g.setColor(p.color);

g.draw(t);

thedraw.remove(i);

}elseif(p.type==-1){

RoundRectangle2Dt=newRoundRectangle2D.Double(x1,

y1,x2-x1,y2-y1,20,20);

g.setColor(p.color);

g.draw(t);

}else

i--;

}

if(p.type==7){//椭圆

x1=p.x;

y1=p.y;

i++;

p=thedraw.get(i);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1