·您的位置: 首页 » 资源教程 » 编程开发 » JAVA、JSP » JAVA小画板(应用程序)

JAVA小画板(应用程序)

类别: JAVA教程  评论数:0 总得分:0
 04年接触了一段时间的JAVA,期间写了比较多小程序段,写得最完整的就是这个JAVA小画板程序,涉及到鼠标事件、画图函数、文件流、文件的打开与保存等内容。

//powered by compower
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;
import java.io.*;

class Point implements Serializable
{
 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;
  }
}


class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener
{
 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;

 FileInputStream picIn = null;
 FileOutputStream picOut = null;
 
 ObjectInputStream VIn = null;
 ObjectOutputStream VOut = null;


// *工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/
 Panel toolPanel;
 Button eraser, drLine,drCircle,drRect;
 Button clear ,pen;
 Choice ColChoice,SizeChoice,EraserChoice;
 Button colchooser;
 Label 颜色,大小B,大小E;
 //保存功能
 Button openPic,savePic;
 FileDialog openPicture,savePicture;
 

  paintboard(String s)
 { 
  super(s);
  addMouseMotionListener(this);
  addMouseListener(this);

  paintInfo = new Vector();

/*各工具按钮及选择项*/
  //颜色选择
  ColChoice = new Choice();
  ColChoice.add(\"black\");
  ColChoice.add(\"red\");
  ColChoice.add(\"blue\");
  ColChoice.add(\"green\");
  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(\"5\");
  EraserChoice.add(\"9\");
  EraserChoice.add(\"13\");
  EraserChoice.add(\"17\");
  EraserChoice.addItemListener(this);
  ////////////////////////////////////////////////////
  toolPanel = new Panel();

  clear = new Button(\"清除\");
  eraser = new Button(\"橡皮\");
  pen = new Button(\"画笔\");
  drLine = new Button(\"画直线\");
  drCircle = new Button(\"画圆形\");
  drRect = new Button(\"画矩形\");

  openPic = new Button(\"打开图画\");
  savePic = new Button(\"保存图画\");
  
  colchooser = new Button(\"显示调色板\");

  //各组件事件监听
  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);

  
  颜色 = new Label(\"画笔颜色\",Label.CENTER);
  大小B = new Label(\"画笔大小\",Label.CENTER);
  大小E = new Label(\"橡皮大小\",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();
  //dialog for save and load

  openPicture = new FileDialog(this,\"打开图画\",FileDialog.LOAD);
  openPicture.setVisible(false);
  savePicture = new FileDialog(this,\"保存图画\",FileDialog.SAVE);
  savePicture.setVisible(false);

  openPicture.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   { openPicture.setVisible(false); }
  });

  savePicture.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   { savePicture.setVisible(false); }
  });

  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);//清除

  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 :
   }//end switch
   }//end if
  }//end for
 }


 public void itemStateChanged(ItemEvent e)
 {
  if(e.getSource()==ColChoice)//预选颜色
  {
   String name = ColChoice.getSelectedItem();
   
   if(name==\"black\")
   { c = new Color(0,0,0); }
   else if(name==\"red\")
   { c = new Color(255,0,0); }
   else if(name==\"green\")
   { c = new Color(0,255,0); }
   else if(name==\"blue\")
   { 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==\"5\")
   {  Econ = 5*2; }
   else if(Esize==\"9\")
   {  Econ = 9*2; }
   else if(Esize==\"13\")
   {  Econ = 13*2; }
   else if(Esize==\"17\")
   {  Econ = 17*3; }

  }

 }

 public void mouseDragged(MouseEvent e)
 {
  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;

   default :
  }
 }

 public void mouseMoved(MouseEvent e) {}

 public void update(Graphics g)
 {
  paint(g);
 }

 public void mousePressed(MouseEvent e)
 { 
  Point p2;
  switch(toolFlag){
   case 3://直线
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;

   case 4: //圆
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;

   case 5: //矩形
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new Point(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;

   default :
  } 
 }

 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 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;   
  }

  if(e.getSource()==openPic)//打开图画
  {
   
   openPicture.setVisible(true);   
   
   if(openPicture.getFile()!=null)
   { 
    int tempflag;
    tempflag = toolFlag;
    toolFlag = 2 ;
    repaint();

    try{ 
      paintInfo.removeAllElements();
      File filein = new File(openPicture.getDirectory(),openPicture.getFile());
      picIn = new FileInputStream(filein);
      VIn = new ObjectInputStream(picIn);
      paintInfo = (Vector)VIn.readObject();
      VIn.close();
      repaint();
      toolFlag = tempflag;

     }

    catch(ClassNotFoundException IOe2)
    {
     repaint();
     toolFlag = tempflag;
     System.out.println(\"can not read object\");
    }
    catch(IOException IOe)
    {
     repaint();
     toolFlag = tempflag;
     System.out.println(\"can not read file\");
    }
   }

  }

  if(e.getSource()==savePic)//保存图画
  {
   savePicture.setVisible(true);
   try{
     File fileout = new File(savePicture.getDirectory(),savePicture.getFile());
     picOut = new FileOutputStream(fileout);
     VOut = new ObjectOutputStream(picOut);
     VOut.writeObject(paintInfo);
     VOut.close();
    }
   catch(IOException IOe)
    {
      System.out.println(\"can not write object\");
    }

   
  }
 }
}//end paintboard

public class pb
{
 public static void main(String args[])
 { new paintboard(\"画图程序\"); }
}




-= 资 源 教 程 =-
文 章 搜 索
关键词:
类型:
范围:
纯粹空间 softpure.com
Copyright © 2006-2008 暖阳制作 版权所有
QQ: 15242663 (拒绝闲聊)  Email: faisun@sina.com
 纯粹空间 - 韩国酷站|酷站欣赏|教程大全|资源下载|免费博客|美女壁纸|设计素材|技术论坛   Valid XHTML 1.0 Transitional
百度搜索 谷歌搜索 Alexa搜索 | 粤ICP备19116064号-1