package hh;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import java.awt.geom.*;class Point{int x,y;Color col;int tool;int boarder;Point(int x, int y, Color col, int tool, int boarder){this.x = x;this.y = y;this.col = col;this.tool = tool;this.boarder = boarder;}}/**BasicStroke*Choice*validate();**/class paintboard extends Frame implements ActionListener, MouseMotionListener, MouseListener, ItemListener{int xx0=0,yy0=0;int xx1=0,yy1=0;int type=6;int x = -1, y = -1;int con = 1; //画笔大小int Econ = 5; //橡皮大小int toolFlag = 0; //toolFlag:工具标记//toolFlag工具对应表://(0--画笔);(1--橡皮);(2--清除);//(3--直线);(4--圆);(5--矩形);Color c = new Color(0,0,0); //画笔颜色BasicStroke size = new BasicStroke (con,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);//画笔粗细Point cutflag = new Point(-1, -1, c, 6, con);//截断标志Vector paintInfo = null;//点信息向量组int n = 1;// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/ Panel toolPanel;Button eraser, drLine,drCircle,drRect;Button clear ,pen;Choice ColChoice,SizeChoice,EraserChoice;Button colchooser;Label 颜色,大小B,大小E;paintboard(String s)//构造函数{super(s);addMouseMotionListener(this);addMouseListener(this);paintInfo = new Vector();/*各工具按钮及选择项*///颜色选择ColChoice = new Choice();ColChoice.add("黑色");ColChoice.add("红色");ColChoice.add("蓝色");ColChoice.add("绿色");ColChoice.addItemListener(this);//画笔大小选择SizeChoice = new Choice();SizeChoice.add("1");SizeChoice.add("3");SizeChoice.add("5");SizeChoice.add("7");SizeChoice.add("9");SizeChoice.addItemListener(this);//橡皮大小选择EraserChoice = new Choice();EraserChoice.add("2");EraserChoice.add("3");EraserChoice.add("4");EraserChoice.add("5");EraserChoice.addItemListener(this);toolPanel = new Panel();clear = new Button("清除");eraser = new Button("橡皮");pen = new Button("画笔");drLine = new Button("画直线");drCircle = new Button("画圆形");drRect = new Button("画矩形");colchooser = new Button("显示调色板");//各组件事件监听clear.addActionListener(this);eraser.addActionListener(this);pen.addActionListener(this);drLine.addActionListener(this);drCircle.addActionListener(this);drRect.addActionListener(this);colchooser.addActionListener(this);颜色= new Label("画笔颜色",Label.CENTER);大小B = new Label("画笔大小",Label.CENTER);大小E = new Label("橡皮大小",Label.CENTER);//面板添加组件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,800,650);setVisible(true);validate();//dialog for save and loadaddWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){ System.exit(0);}});}public void paint(Graphics g){Graphics2D g2d = (Graphics2D)g;Point p1,p2;n = paintInfo.size();if(toolFlag==2)g.clearRect(0,0,getSize().width,getSize().height);//清除switch(type){case 3:Line2D line = new Line2D.Double(xx0,yy0,xx1,yy1);g2d.draw(line);break;case 4:Ellipse2D ellipse1 = new Ellipse2D.Double(xx0, yy0, Math.abs(xx1-xx0) ,Math.abs(yy1-yy0));g2d.draw(ellipse1);break;case 5:Rectangle2D rect1 = new Rectangle2D.Double(xx0, yy0, Math.abs(xx1-xx0) , Math.abs(yy1-yy0));g2d.draw(rect1);break;default:break;}for(int i=0; i<n-1; i++){p1 = (Point)paintInfo.elementAt(i);p2 = (Point)paintInfo.elementAt(i+1);size = new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL); g2d.setColor(p1.col);g2d.setStroke(size);if(p1.tool==p2.tool){switch(p1.tool){case 0://画笔Line2D line1 = new Line2D.Double(p1.x, p1.y, p2.x,p2.y);g2d.draw(line1);break;case 1://橡皮g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);break;case 3://画直线Line2D line2 = new Line2D.Double(p1.x, p1.y, p2.x, p2.y);g2d.draw(line2);break;case 4://画圆Ellipse2D ellipse = new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) ,Math.abs(p2.y-p1.y));g2d.draw(ellipse);break;case 5://画矩形Rectangle2D rect = new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x) ,Math.abs(p2.y-p1.y));g2d.draw(rect);break;case 6://截断,跳过i=i+1;break;default :break;}//end switch}//end if}//end for}public void itemStateChanged(ItemEvent e){if(e.getSource()==ColChoice)//预选颜色{String name = ColChoice.getSelectedItem();if(name=="黑色"){ c = new Color(0,0,0); }else if(name=="红色"){ c = new Color(255,0,0); }else if(name=="绿色"){ c = new Color(0,255,0); }else if(name=="蓝色"){ c = new Color(0,0,255); }}else if(e.getSource()==SizeChoice)//画笔大小{String selected = SizeChoice.getSelectedItem();if(selected=="1"){con = 1;size = new BasicStroke(con,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);}else if(selected=="3"){con = 3;size = new BasicStroke(con,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);}else if(selected=="5"){con = 5;size = new BasicStroke(con,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);}else if(selected=="7"){con = 7;size = new BasicStroke(con,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);}else if(selected=="9"){con = 9;size = new BasicStroke(con,BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL);}}else if(e.getSource()==EraserChoice)//橡皮大小{String Esize = EraserChoice.getSelectedItem();if(Esize=="2"){ Econ = 3*3; }else if(Esize=="3"){ Econ = 4*4; }else if(Esize=="4"){ Econ = 5*5; }else if(Esize=="5"){ Econ = 6*6; } }}public void mouseDragged(MouseEvent e){xx1 = (int)e.getX();yy1 = (int)e.getY();Point p1 ;switch(toolFlag){case 0://画笔x = (int)e.getX();y = (int)e.getY();p1 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p1);repaint();break;case 1://橡皮x = (int)e.getX();y = (int)e.getY();p1 = new Point(x, y, null, toolFlag, Econ);paintInfo.addElement(p1);repaint();break;case 3:case 4:case 5:repaint();break;default :}//repaint();}public void mousePressed(MouseEvent e){xx0= (int)e.getX();yy0= (int)e.getY();Point p2;switch(toolFlag){case 3://直线type=3;x = (int)e.getX();y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;case 4: //圆type=4;x = (int)e.getX();y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;case 5: //矩形type=5;x = (int)e.getX();y = (int)e.getY();p2 = new Point(x, y, c, toolFlag, con);paintInfo.addElement(p2);break;default :type=6;}}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){}public void mouseMoved(MouseEvent e){}public void actionPerformed(ActionEvent e){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)//调色板{Color newColor = JColorChooser.showDialog(this, "调色板",c);c = newColor;}}public void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}}//endpublic class PaintBrush{public static void main (String args[]){new paintboard("画图程序");}}。