【转】java,画图,可调画笔粗细

/*可调画笔粗细-Java画图实验-Java源代码 -good code
*画直线,曲线,矩形,椭圆,可调颜色,有橡皮擦功能
*可调画笔粗细
*没有解决闪烁功能
*hxz*/
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 load
            addWindowListener(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 mouseReleased(MouseEvent e)
     {
            Point p3;
             switch(toolFlag){
                  case 0: //画笔
               paintInfo.addElement(cutflag);
               break;
                  case 1: //eraser
               paintInfo.addElement(cutflag);
               break;
                  case 3: //直线
               x = (int)e.getX();
               y = (int)e.getY();
               p3 = new Point(x, y, c, toolFlag, con);
               paintInfo.addElement(p3);
               paintInfo.addElement(cutflag);
               repaint();
               break;
                  case 4: //圆
               x = (int)e.getX();
               y = (int)e.getY();
               p3 = new Point(x, y, c, toolFlag, con);
               paintInfo.addElement(p3);
               paintInfo.addElement(cutflag);
               repaint();
               break;
                  case 5: //矩形
               x = (int)e.getX();
               y = (int)e.getY();
               p3 = new Point(x, y, c, toolFlag, con);
               paintInfo.addElement(p3);
               paintInfo.addElement(cutflag);
               repaint();
               break;
                  default:
            }
     }
     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;}
            }
     }//end

public class houyang
{
      public static void main (String args[])
      {
            new paintboard("画图程序");
       }
}
/*
*javac -Xlint:unchecked houyang.java
*
houyang.java:270: 警告:[unchecked] 对作为普通类型 java.util.Vector 的成员的 add
Element(E) 的调用未经检查
                paintInfo.addElement(p1);
                                    ^
13 警告
*/

 

你可能感兴趣的:(java,C++,c,swing,C#)