⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pb.java

📁 可以实现简单的画图功能
💻 JAVA
字号:

//powered by compower
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
//线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。

import javax.swing.*;
import java.awt.geom.*;
//提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。包的一些重要功能包括: 操纵几何形状(如 AffineTransform)的类和所有 Shape 对象都实现的 PathIterator 接口。实现 Shape 接口(如 CubicCurve2D、Ellipse2D、Line2D、Rectangle2D 和 GeneralShape)的类。提供在其他 Shape 对象上进行加(合并)、减、相交、异或操作机制的 Area 类。 

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;

 Color c = new Color(0,0,0); 
 BasicStroke size = new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
                                         //在Java 语言中,此方法创建一个形状,其内部定义了轮廓线。
 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;
 
 Button colchooser;
 

 Button openPic,savePic;
 FileDialog openPicture,savePicture;
 

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

  paintInfo = new Vector();

  
  ////////////////////////////////////////////////////
  toolPanel = new Panel();

  clear = new Button("new");
  
  pen = new Button("pen");
  drLine = new Button("line");
  drCircle = new Button("circle");
  drRect = new Button("rectangle");
  openPic = new Button("open");
  savePic = new Button("save");  
 
  clear.addActionListener(this);
  
  pen.addActionListener(this);
  drLine.addActionListener(this);
  drCircle.addActionListener(this);
  drRect.addActionListener(this);
  openPic.addActionListener(this);
  savePic.addActionListener(this);
  
  toolPanel.add(clear);
  toolPanel.add(openPic);
  toolPanel.add(savePic);  
  toolPanel.add(pen);
  toolPanel.add(drLine);
  toolPanel.add(drCircle);
  toolPanel.add(drRect);

    
  add(toolPanel,BorderLayout.NORTH);

  setBounds(60,60,500,500);
  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) { }

 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 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()==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()==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("PaintBoard"); }
}//ͼ

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -