p1=(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);
绘制图形用到类Graphics2D,其中包括很多绘制图形的方法,定义一个Graphics2D类g,用getGraphics()来得到一个Graphics2D对象,它相当于组建的绘图环境,可以进行各种绘图操作。
定义一个BasicStroke类size来确定画笔的大小,其中BasicStroke类定义针对图形图元轮廓呈现属性的一个基本集合,这些图元使用Graphics2D 对象呈现,而该对象的Stroke 属性设置为此BasicStroke。
其中con为画笔宽度,CAP_BUTT指无装饰地结束未封闭的子路径和虚线线段,JOIN_BEVEL通过直线连接宽体轮廓的外角,将路径线段连接在一起。
2、实现画笔、橡皮、直线,椭圆和矩形的绘制。
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
}//end绘图方法paint()
}
3、对画笔大小的设定,和对橡皮大小的设定。
Stringselected=SizeChoice.getSelectedItem();
if(selected=="1"){
con=1;
size=newBasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
{//橡皮大小
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;}
}
代码:
//构造方法
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);}});
}//构造方法完毕
//绘图方法paint()
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
}//end绘图方法paint()
//下拉式列表响应方法
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);
}
}//画笔大小if结束
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);
}
//鼠标press事件
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:
}
}//鼠标press事件结束
//鼠标release事件:
设置几何图元信息后调用paint()
publicvoidmouseReleased(MouseEvente){
Pointp3;
switch(toolFlag){
case0:
//画笔
paintInfo.addElement(cutflag);
break;
case1:
//eraser
paintInfo.addElement(cutflag);
break;
case3:
//直线
x=(int)e.getX();
y=(int