java编的画板的源代码.docx
《java编的画板的源代码.docx》由会员分享,可在线阅读,更多相关《java编的画板的源代码.docx(17页珍藏版)》请在冰豆网上搜索。
![java编的画板的源代码.docx](https://file1.bdocx.com/fileroot1/2023-2/7/a2e59ebb-cba2-42af-b16e-fed3f98aabf8/a2e59ebb-cba2-42af-b16e-fed3f98aabf81.gif)
java编的画板的源代码
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjavax.swing.*;
importjava.awt.geom.*;
importjava.io.*;
classPointimplementsSerializable
{
intx,y;
Colorcol;
inttool;
intboarder;
Point(intx,inty,Colorcol,inttool,intboarder)
{
this.x=x;
this.y=y;
this.col=col;
this.tool=tool;
this.boarder=boarder;
}
}
classpaintboardextendsFrameimplementsActionListener,MouseMotionListener,MouseListener,ItemListener
{
intx=-1,y=-1;
intcon=1;//画笔大小
intEcon=5;//橡皮大小
inttoolFlag=0;//toolFlag:
工具标记
//toolFlag工具对应表:
//(0--画笔);(1--橡皮);(2--清除);
//(3--直线);(4--圆);(5--矩形);
Colorc=newColor(0,0,0);//画笔颜色
BasicStrokesize=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);//画笔粗细
Pointcutflag=newPoint(-1,-1,c,6,con);//截断标志
VectorpaintInfo=null;//点信息向量组
intn=1;
FileInputStreampicIn=null;
FileOutputStreampicOut=null;
ObjectInputStreamVIn=null;
ObjectOutputStreamVOut=null;
//*工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/
PaneltoolPanel;
Buttoneraser,drLine,drCircle,drRect;
Buttonclear,pen;
ChoiceColChoice,SizeChoice,EraserChoice;
Buttoncolchooser;
Label颜色,大小B,大小E;
//保存功能
ButtonopenPic,savePic;
FileDialogopenPicture,savePicture;
paintboard(Strings)
{
super(s);
addMouseMotionListener(this);
addMouseListener(this);
paintInfo=newVector();
/*各工具按钮及选择项*/
//颜色选择
ColChoice=newChoice();
ColChoice.add("black");
ColChoice.add("red");
ColChoice.add("blue");
ColChoice.add("green");
ColChoice.addItemListener(this);
//画笔大小选择
SizeChoice=newChoice();
SizeChoice.add("1");
SizeChoice.add("3");
SizeChoice.add("5");
SizeChoice.add("7");
SizeChoice.add("9");
SizeChoice.addItemListener(this);
//橡皮大小选择
EraserChoice=newChoice();
EraserChoice.add("5");
EraserChoice.add("9");
EraserChoice.add("13");
EraserChoice.add("17");
EraserChoice.addItemListener(this);
////////////////////////////////////////////////////
toolPanel=newPanel();
clear=newButton("清除");
eraser=newButton("橡皮");
pen=newButton("画笔");
drLine=newButton("画直线");
drCircle=newButton("画圆形");
drRect=newButton("画矩形");
openPic=newButton("打开图画");
savePic=newButton("保存图画");
colchooser=newButton("显示调色板");
//各组件事件监听
clear.addActionListener(this);
eraser.addActionListener(this);
pen.addActionListener(this);
drLine.addActionListener(this);
drCircle.addActionListener(this);
drRect.addActionListener(this);
openPic.addActionListener(this);
savePic.addActionListener(this);
colchooser.addActionListener(this);
颜色=newLabel("画笔颜色",Label.CENTER);
大小B=newLabel("画笔大小",Label.CENTER);
大小E=newLabel("橡皮大小",Label.CENTER);
//面板添加组件
toolPanel.add(openPic);
toolPanel.add(savePic);
toolPanel.add(pen);
toolPanel.add(drLine);
toolPanel.add(drCircle);
toolPanel.add(drRect);
toolPanel.add(颜色);toolPanel.add(ColChoice);
toolPanel.add(大小B);toolPanel.add(SizeChoice);
toolPanel.add(colchooser);
toolPanel.add(eraser);
toolPanel.add(大小E);toolPanel.add(EraserChoice);
toolPanel.add(clear);
//工具面板到APPLET面板
add(toolPanel,BorderLayout.NORTH);
setBounds(60,60,900,600);setVisible(true);
validate();
//dialogforsaveandload
openPicture=newFileDialog(this,"打开图画",FileDialog.LOAD);
openPicture.setVisible(false);
savePicture=newFileDialog(this,"保存图画",FileDialog.SAVE);
savePicture.setVisible(false);
openPicture.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{openPicture.setVisible(false);}
});
savePicture.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{savePicture.setVisible(false);}
});
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{System.exit(0);}
});
}
publicvoidpaint(Graphicsg)
{
Graphics2Dg2d=(Graphics2D)g;
Pointp1,p2;
n=paintInfo.size();
if(toolFlag==2)
g.clearRect(0,0,getSize().width,getSize().height);//清除
for(inti=0;ip1=(Point)paintInfo.elementAt(i);
p2=(Point)paintInfo.elementAt(i+1);
size=newBasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
g2d.setColor(p1.col);
g2d.setStroke(size);
if(p1.tool==p2.tool)
{
switch(p1.tool)
{
case0:
//画笔
Line2Dline1=newLine2D.Double(p1.x,p1.y,p2.x,p2.y);
g2d.draw(line1);
break;
case1:
//橡皮
g.clearRect(p1.x,p1.y,p1.boarder,p1.boarder);
break;
case3:
//画直线
Line2Dline2=newLine2D.Double(p1.x,p1.y,p2.x,p2.y);
g2d.draw(line2);
break;
case4:
//画圆
Ellipse2Dellipse=newEllipse2D.Double(p1.x,p1.y,Math.abs(p2.x-p1.x),Math.abs(p2.y-p1.y));
g2d.draw(ellipse);
break;
case5:
//画矩形
Rectangle2Drect=newRectangle2D.Double(p1.x,p1.y,Math.abs(p2.x-p1.x),Math.abs(p2.y-p1.y));
g2d.draw(rect);
break;
case6:
//截断,跳过
i=i+1;
break;
default:
}//endswitch
}//endif
}//endfor
}
publicvoiditemStateChanged(ItemEvente)
{
if(e.getSource()==ColChoice)//预选颜色
{
Stringname=ColChoice.getSelectedItem();
if(name=="black")
{c=newColor(0,0,0);}
elseif(name=="red")
{c=newColor(255,0,0);}
elseif(name=="green")
{c=newColor(0,255,0);}
elseif(name=="blue")
{c=newColor(0,0,255);}
}
elseif(e.getSource()==SizeChoice)//画笔大小
{
Stringselected=SizeChoice.getSelectedItem();
if(selected=="1")
{
con=1;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
elseif(selected=="3")
{
con=3;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
elseif(selected=="5")
{con=5;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
elseif(selected=="7")
{con=7;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
elseif(selected=="9")
{con=9;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
}
elseif(e.getSource()==EraserChoice)//橡皮大小
{
StringEsize=EraserChoice.getSelectedItem();
if(Esize=="5")
{Econ=5*2;}
elseif(Esize=="9")
{Econ=9*2;}
elseif(Esize=="13")
{Econ=13*2;}
elseif(Esize=="17")
{Econ=17*3;}
}
}
publicvoidmouseDragged(MouseEvente)
{
Pointp1;
switch(toolFlag){
case0:
//画笔
x=(int)e.getX();
y=(int)e.getY();
p1=newPoint(x,y,c,toolFlag,con);
paintInfo.addElement(p1);
repaint();
break;
case1:
//橡皮
x=(int)e.getX();
y=(int)e.getY();
p1=newPoint(x,y,null,toolFlag,Econ);
paintInfo.addElement(p1);
repaint();
break;
default:
}
}
publicvoidmouseMoved(MouseEvente){}
publicvoidupdate(Graphicsg)
{
paint(g);
}
publicvoidmousePressed(MouseEvente)
{
Pointp2;
switch(toolFlag){
case3:
//直线
x=(int)e.getX();
y=(int)e.getY();
p2=newPoint(x,y,c,toolFlag,con);
paintInfo.addElement(p2);
break;
case4:
//圆
x=(int)e.getX();
y=(int)e.getY();
p2=newPoint(x,y,c,toolFlag,con);
paintInfo.addElement(p2);
break;
case5:
//矩形
x=(int)e.getX();
y=(int)e.getY();
p2=newPoint(x,y,c,toolFlag,con);
paintInfo.addElement(p2);
break;
default:
}
}
publicvoidmouseReleased(MouseEvente)
{
Pointp3;
switch(toolFlag){
case0:
//画笔
paintInfo.addElement(cutflag);
break;
case1:
//eraser
paintInfo.addElement(cutflag);
break;
case3:
//直线
x=(int)e.getX();
y=(int)e.getY();
p3=newPoint(x,y,c,toolFlag,con);
paintInfo.addElement(p3);
paintInfo.addElement(cutflag);
repaint();
break;
case4:
//圆
x=(int)e.getX();
y=(int)e.getY();
p3=newPoint(x,y,c,toolFlag,con);
paintInfo.addElement(p3);
paintInfo.addElement(cutflag);
repaint();
break;
case5:
//矩形
x=(int)e.getX();
y=(int)e.getY();
p3=newPoint(x,y,c,toolFlag,con);
paintInfo.addElement(p3);
paintInfo.addElement(cutflag);
repaint();
break;
default:
}
}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseClicked(MouseEvente){}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==pen)//画笔
{toolFlag=0;}
if(e.getSource()==eraser)//橡皮
{toolFlag=1;}
if(e.getSource()==clear)//清除
{
toolFlag=2;
paintInfo.removeAllElements();
repaint();
}
if(e.getSource()==drLine)//画线
{toolFlag=3;}
if(e.getSource()==drCircle)//画圆
{toolFlag=4;}
if(e.getSource()==drRect)//画矩形
{toolFlag=5;}
if(e.getSource()==colchooser)//调色板
{
ColornewColor=JColorChooser.showDialog(this,"调色板",c);
c=newColor;
}
if(e.getSource()==openPic)//打开图画
{
openPicture.setVisible(true);
if(openPicture.getFile()!
=null)
{
inttempflag;
tempflag=toolFlag;
toolFlag=2;
repaint();
try{
paintInfo.removeAllElements();
Filefilein=newFile(openPicture.getDirectory(),openPicture.getFile());
picIn=newFileInputStream(filein);
VIn=newObjectInputStream(picIn);
paintInfo=(Vector)VIn.readObject();
VIn.close();
repaint();
toolFlag=tempflag;
}
catch(ClassNotFoundExceptionIOe2)
{
repaint();
toolFlag=tempflag;
System.out.println("cannotreadobject");
}
catch(IOExceptionIOe)
{
repaint();
toolFlag=tempflag;
System.out.println("cannotreadfile");
}
}
}
if(e.getSource()==savePic)//保存图画
{
savePicture.setVisible(true);
try{
Filefileout=newFile(savePicture.getDirectory(),savePicture.getFile());
picOut=newFileOutputStream(fileout);
VOut=newObjectOutputStream(picOut);
VOut.writeObject(paintInfo);
VOut.close();
}
catch(IOExceptionIOe)
{
System.out.println("cannotwriteobject");
}
}
}
}//endpaintboard
publicclasspb
{
publicstaticvoidmain(Stringargs[])
{newpaintboard("画图程序");