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

📄 drawingpanel.java

📁 利用java编写的paintbox小程序
💻 JAVA
字号:
/*
 * DrawingPanel.java
 *
 * Created on 2007年4月23日, 下午11:58
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package paintbox;

/**
 *
 * @author fly
 */

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.io.*;

public class DrawingPanel extends JPanel implements MouseListener,MouseMotionListener{
    
    /** Creates a new instance of DrawingPanel */
    
   public static final int DRAWAREA = 600;

   private ButtonBar buttonBar;
   private ArrayList drawnItems;
   private File openFile;        //画布上的图形是从哪个文件中打开的
   private boolean openFromFile;   //说明画布上的图形是不是从文件中打开的
   private boolean saved;            //画布上的图形是否已经保存
   private Shape currentShape;
   private Point basePoint, currentPoint, frontPoint;
   private int lastShape;
   private int slectedItem;    //被选图形在“drawnItems”中的下标
   
   public DrawingPanel (ButtonBar buttons)
   {
      buttonBar = buttons;
      slectedItem=-1;    //初始为-1,表明没有图形被选中

      drawnItems = new ArrayList ();
      openFromFile=false;
      saved=true;

      lastShape = ButtonBar.SELECT;

      setBackground (Color.white);
      setMinimumSize (new Dimension (DRAWAREA, DRAWAREA));
      setPreferredSize (new Dimension (DRAWAREA, DRAWAREA));

      addMouseListener (this);
      addMouseMotionListener (this);
   }
   
   public boolean isSaved()
   {
       return saved;
   }
   
   public void setSaved()
   {
       saved=true;
   }
   
   public void setUnSaved()
   {
       saved=false;
   }
   
   public boolean isOpenFromFile()
   {
       return openFromFile;
   }
   
   public void setOpenFromFile(boolean f)
   {
       openFromFile=f;
   }
   
   public void setOpenFile(File file)
   {
       openFile=file;
   }
   
   public File getOpenFile()
   {
       return openFile;
   }
   
   public ArrayList getDrawnItems()
   {
       return drawnItems;
   }
   
   public void setDrawnItems(ArrayList drawnItems)
   {
       this.drawnItems=drawnItems;
       repaint();
   }
   
   public int getSlectedItem()
   {
       return slectedItem;
   }
   
   public void quashSlectedItem()
   {
       if(slectedItem!=-1)
       {
           ((Shape)drawnItems.get(slectedItem)).setUnSlected();
           slectedItem=-1;
           repaint();
       }

       
   }
       
   
   public void paintComponent (Graphics page)
   {
      super.paintComponent (page);

      if (drawnItems.size () > 0)
         for (int index = 0; index <= drawnItems.size ()-1; index++)
            ((Shape) drawnItems.get (index)).draw (page);
          
   }
   
   public void mousePressed (MouseEvent event)
   {
      int currentAction = buttonBar.getButton ();
      Color strokeColor = buttonBar.getStrokeColor ();
      Color fillColor=buttonBar.getcurrentFillColor();
      quashSlectedItem();

      basePoint = event.getPoint ();
      frontPoint=basePoint;

      switch (currentAction)
      {
         case ButtonBar.SELECT:                           //以下代码实现图形的选定
            lastShape = ButtonBar.SELECT;
            if(slectedItem!=-1){
                 ((Shape)drawnItems.get(slectedItem)).setUnSlected();
                 slectedItem=-1;
            }
            for(int n=drawnItems.size()-1; n>=0; n--)
            {
                if(((Shape)drawnItems.get(n)).isSlected(basePoint))
                {
                    ((Shape)drawnItems.get(n)).setSlected();
                    slectedItem=n;
                     break;
                }
              
            }
            break;

         case ButtonBar.LINE:
            currentShape = new Line (strokeColor, basePoint,
                                     basePoint);
            lastShape = ButtonBar.LINE;
            drawnItems.add (currentShape);
            setUnSaved();
            break;

         case ButtonBar.OVAL:
            currentShape = new Oval (strokeColor, basePoint, 0, 0);
            lastShape = ButtonBar.OVAL;
            drawnItems.add (currentShape);
            setUnSaved();
            break;

         case ButtonBar.RECT:
            currentShape = new Rect (strokeColor, basePoint, 0, 0);
            lastShape = ButtonBar.RECT;
            drawnItems.add (currentShape);
            setUnSaved();
            break;

         case ButtonBar.POLY:
            if (lastShape == ButtonBar.POLY)
               ((Poly) currentShape).updateLastPoint (basePoint.x,
                                                      basePoint.y);
            else
            {
               lastShape = ButtonBar.POLY;
               currentShape = new Poly (strokeColor, basePoint.x,
                                        basePoint.y);
               drawnItems.add (currentShape);
            }
            ((Poly) currentShape).addPoint (basePoint.x, basePoint.y);
            setUnSaved();
            break;
            
         case ButtonBar.FILLCOLOR:
            for(int n=drawnItems.size()-1; n>=0; n--)
            {
                if(((Shape)drawnItems.get(n)).isSlected(basePoint))
                {
                   if((Shape)drawnItems.get(n) instanceof BoundedShape)
                   {
                       ((BoundedShape)drawnItems.get(n)).setFilled(fillColor);
                       setUnSaved();
                   }
                   break;
                }
              
           }
           break;
       
         case ButtonBar.COLOR:
            for(int n=drawnItems.size()-1; n>=0; n--)
            {
                if(((Shape)drawnItems.get(n)).isSlected(basePoint))
                {
                       ((Shape)drawnItems.get(n)).setStrokeColor(strokeColor);
                       setUnSaved();
                   break;
                }
              
           }
           break;
              
      }
          
      repaint ();
   }
   
   public void mouseDragged (MouseEvent event)
   {
      int currentAction = buttonBar.getButton ();

      currentPoint = event.getPoint ();
      switch (currentAction)
      {    
         case ButtonBar.SELECT:
             int xChanged,yChanged;
             if(slectedItem!=-1)
             {
                 xChanged=currentPoint.x-frontPoint.x;
                 yChanged=currentPoint.y-frontPoint.y;
                 frontPoint=currentPoint;
                 ((Shape)drawnItems.get(slectedItem)).positionChanged(xChanged,yChanged);
                 setUnSaved();
             }
             break;
         case ButtonBar.LINE:
            ((Line) currentShape).setEndPoint (currentPoint);
            setUnSaved();
            break;

         case ButtonBar.OVAL:
            ((Oval) currentShape).setShape (basePoint, currentPoint);
            setUnSaved();
            break;

         case ButtonBar.RECT:
            ((Rect) currentShape).setShape (basePoint, currentPoint);
            setUnSaved();
            break;

         case ButtonBar.POLY:
            ((Poly) currentShape).updateLastPoint (currentPoint.x,
                                                   currentPoint.y);
            setUnSaved();
            break;
      }
      
      repaint ();
   }  
   
   public void mouseMoved (MouseEvent event) {}
   public void mouseReleased (MouseEvent event) {}
   public void mouseEntered (MouseEvent event) {}
   public void mouseExited (MouseEvent event) {}
   public void mouseClicked (MouseEvent event) {}   
   
}





⌨️ 快捷键说明

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