百度空间 | 百度首页 
 
查看文章
 
java编写的类似于windows自带的画图软件!!
2009-06-19 18:07

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;
import java.io.*;
class lsdPoint implements Serializable
{ int x,y;
Color col;
int tool;
int boarder;
lsdPoint(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 lsdpaintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener
   {
    int x = -1, y = -1;
    int con = 1;
    int Econ = 5;
    int toolFlag = 0;
    Color c = new Color(0,0,0);
    BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
    lsdPoint cutflag = new lsdPoint(-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;
    Panel pn;
    Button eraser, drLine,drCircle,drRect;
    Button clear ,pen;
    Choice ColChoice,SizeChoice,EraserChoice;
    Button colchooser;
    Label 颜色,大小B,大小E,b1,b2;
    Button openPic,savePic;
    FileDialog openPicture,savePicture;
    lsdpaintboard(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);   
    pn=new Panel();
    add(pn,BorderLayout.NORTH);    
    toolPanel = new Panel();   
    JMenuBar menubar=new JMenuBar();
    pn.add(menubar);
    JMenu menu, submenu;
      JMenuItem menuItem;
      menu=new JMenu("文件");
      menu.setMnemonic(KeyEvent.VK_F);
      menubar.add(menu);
      menuItem=new JMenuItem("打开");
      menuItem.setMnemonic(KeyEvent.VK_O);     
      menuItem.addActionListener(this);
      menu.add(menuItem);
      menuItem=new JMenuItem("保存", KeyEvent.VK_S);
      menuItem.addActionListener(this);
      menuItem.setEnabled(false);
      menu.add(menuItem);
      menuItem=new JMenuItem("关闭");
      menuItem.setMnemonic(KeyEvent.VK_C);
      menuItem.addActionListener(this);
      menu.add(menuItem);
      menu=new JMenu("编辑");
      menu.setMnemonic(KeyEvent.VK_E);
      menubar.add(menu);
      menuItem=new JMenuItem("剪切");
      menuItem.setMnemonic(KeyEvent.VK_T);
      menuItem.addActionListener(this);
      menu.add(menuItem);
      menuItem=new JMenuItem("复制");
      menuItem.setMnemonic(KeyEvent.VK_C);
      menuItem.addActionListener(this);
      menu.add(menuItem);
      menuItem=new JMenuItem("粘帖");
      menuItem.setMnemonic(KeyEvent.VK_P);
      menuItem.addActionListener(this);
      menu.add(menuItem);     
      menu=new JMenu("帮助");
      menu.setMnemonic(KeyEvent.VK_H);
      menubar.add(menu);
      menuItem=new JMenuItem("关于");
      menuItem.addActionListener(this);
      menu.add(menuItem);
      JMenuItem menuItem1;
      menu=new JMenu("                                                                                                                            ");
      menubar.add(menu);
      JMenuItem menuItem2;
      menu=new JMenu("                                                                                                                            ");      menubar.add(menu);
                b1=new Label("");
                b2=new Label("");
    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("显示调色板");
    toolPanel.setLayout(new GridLayout(10,2,10,10));
    toolPanel.add(savePic);
    toolPanel.add(openPic);
    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(b1);
    toolPanel.add(b2);
    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);
    add(toolPanel,BorderLayout.WEST);
    setBounds(60,60,900,600); setVisible(true);
    validate();
    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;
       lsdPoint p1,p2;
       n = paintInfo.size();
       if(toolFlag==2)
       g.clearRect(0,0,getSize().width,getSize().height);
       for(int i=0; i<n;i++){
       p1 = (lsdPoint)paintInfo.elementAt(i);
       p2 = (lsdPoint)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 :
       }
       }
       }
       }
   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)
    {
     lsdPoint p1 ;
     switch(toolFlag){
      case 0:
      x = (int)e.getX();
      y = (int)e.getY();
      p1 = new lsdPoint(x, y, c, toolFlag, con);
      paintInfo.addElement(p1);
      repaint();
      break;
      case 1:
      x = (int)e.getX();
      y = (int)e.getY();
      p1 = new lsdPoint(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)
   {
    lsdPoint p2;
    switch(toolFlag){
     case 3:
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new lsdPoint(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;
     case 4:
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new lsdPoint(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;
     case 5:
     x = (int)e.getX();
     y = (int)e.getY();
     p2 = new lsdPoint(x, y, c, toolFlag, con);
     paintInfo.addElement(p2);
     break;
     default :
     }
     }
   public void mouseReleased(MouseEvent e)
   {
    lsdPoint p3;
    switch(toolFlag){
    case 0:
    paintInfo.addElement(cutflag);
    break;
    case 1:
    paintInfo.addElement(cutflag);
    break;
    case 3:
    x = (int)e.getX();
    y = (int)e.getY();
    p3 = new lsdPoint(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 lsdPoint(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 lsdPoint(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");
               }
               }
               }
               }
    public class lsd
     {
     public void actionPerformed(ActionEvent e)
           {
         if(e.getActionCommand()=="关闭")
        System.exit(0);   
}
     public static void main(String args[])
     { new lsdpaintboard("画图程序"); }
     }  

只要定义文件的名称为lsd(本人名字的缩写)运行即可!       

            


类别:默认分类 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu