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

📄 drawingpanel.java

📁 一个简单绘图程序
💻 JAVA
字号:
//********************************************************************
//  DrawingShapes.java       Author: XieXing
//
// Panel allows user to create a shape.
//********************************************************************

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

public class DrawingPanel extends JPanel {

   // 存储图形
   private ArrayList shapesArrayList = new ArrayList();

   // 当前绘制图形
   private Shapes currentShape;

   // 初始化不选择
   private int currentType = 0;
   
   //默认未选择填充
   private boolean fillShape = false;

   // 初始化默认绘图颜色
   private Color currentColor = new Color( 204, 204, 204 );

   // 构造函数
   public DrawingPanel()
   {
      addMouseListener( 
         
         new MouseAdapter() // 匿名内部类
         {
            // 监听鼠标按下按钮事件
            public void mousePressed(MouseEvent event)
            {
               paintPanelMousePressed(event);
            }
         }
      ); 

      addMouseMotionListener(
         
         new MouseMotionAdapter() // 匿名内部类
         {
            // 监听鼠标在绘图区拖拽事件
            public void mouseDragged(MouseEvent event)
            {
               paintPanelMouseDragged(event);
            }
         }
      );
   } 

   // 改变当前绘图图形
   public void setCurrentShapeType(int shape)
   {
      currentType = shape;
   } 
   
   //设置填充图形
   public void setfillShape (boolean fill)
   {
   	  fillShape = fill;
   }

   // 改变当前颜色
   public void setCurrentColor(Color shapeColor)
   {
      currentColor = shapeColor;
   }

   // 创建新图形
   public void paintPanelMousePressed(MouseEvent event)
   {
      if(fillShape == false)
      {
      	switch(currentType)
      {
      case 0:  // 创建一个Line对象并赋值给Shapes类型的变量
            currentShape = new Line( event.getX(), event.getY(), 
                event.getX(), event.getY(), currentColor );
            break;
      case 1:  // 创建一个Rectangle对象并赋值给Shapes类型的变量
            currentShape = new Rectangle( event.getX(), event.getY(), 
                event.getX(), event.getY(), currentColor );
            break;
      case 2:  // 创建一个Oval对象并赋值给Shapes类型的变量
            currentShape = new Oval( event.getX(), event.getY(), 
                event.getX(), event.getY(), currentColor );
            break;   
      case 3:  // 创建一个Circle对象并赋值给Shapes类型的变量
            currentShape = new Circle( event.getX(), event.getY(), 
                event.getX(), event.getY(), currentColor );
            break;
      }
      }
      else
      {
      	switch(currentType)
      {
      case 0:  // 创建一个Line对象并赋值给Shapes类型的变量
            currentShape = new Line( event.getX(), event.getY(), 
                event.getX(), event.getY(), currentColor );
            break;
      case 1:  // 创建一个Rectangle对象并赋值给Shapes类型的变量
            currentShape = new FillRect( event.getX(), event.getY(), 
                event.getX(), event.getY(), currentColor );
            break;
      case 2:  // 创建一个Oval对象并赋值给Shapes类型的变量
            currentShape = new FillOval( event.getX(), event.getY(), 
                event.getX(), event.getY(), currentColor );
            break;   
      case 3:  // 创建一个Circle对象并赋值给Shapes类型的变量
            currentShape = new FillCircle( event.getX(), event.getY(), 
                event.getX(), event.getY(), currentColor );
            break;
      }
      }
      
      shapesArrayList.add( currentShape );
   }

   // 响应鼠标拖拽,设置当前图形的坐标
   public void paintPanelMouseDragged( MouseEvent event )
   {
      currentShape.setX2( event.getX() );
      currentShape.setY2( event.getY() );
      repaint();
   }

   // 利用迭代器绘制每一个图形
   public void paintComponent( Graphics g )
   {
      super.paintComponent( g );

      Shapes nextShape;
      Iterator shapesIterator = shapesArrayList.iterator();

      while ( shapesIterator.hasNext() )
      {
         nextShape = ( Shapes ) shapesIterator.next();
         nextShape.draw( g );
      }   
   } 
}

⌨️ 快捷键说明

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