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

📄 drawingmethod.java

📁 编译器
💻 JAVA
字号:
package DrawingBoard;

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

class DrawingMethod extends JPanel implements MouseListener, MouseMotionListener
{
  public static int drawingmethod = 0;//the symbol toshow what should be drawn 
                                      //for example  0:draw Scribble
                                      //             1:draw line
                                      //             2:draw rect
                                      //             3:draw oval 
  public static int pencolor = 0;//the symbol toshow what color should the pen be 
                                 //for example  0:draw black
                                 //             1:draw green
                                 //             2:draw red
                                 //             3:draw yellow..
  public static boolean clearup = false;
  
  final int CIRCLESIZE = 20; // Circle diameter used for erasing
  private Point lineStart = new Point(0, 0); // Line start point
  private Point lineTerminal = new Point(0,0);// Line terminal point
  private static Graphics g;
  private int width;
  private int height;
  
  private int[] buffer = new int [10000000];
  private int bufferindex = 0;
  private int shownumber = 0;
  public static boolean whetherintobuffer = false;
  public static boolean isdraw = true;
  
  //constructor
  public DrawingMethod()
  {
  	//register listener 
  	addMouseListener(this);
    addMouseMotionListener(this);

  }
  
  private void drawnow(Graphics g)
  {
       switch(pencolor)
       {
    	case -1:g.setColor(getBackground());
    	        break;
    	case 0:g.setColor(Color.black);
    	       break;
        case 1:g.setColor(Color.green);
               break;
        case 2:g.setColor(Color.red);
               break; 
        case 3:g.setColor(Color.yellow);
       }
  	
  	   switch(drawingmethod)
  	   {
  		case -1:g.fillOval(lineTerminal.x - (CIRCLESIZE/2),
                           lineTerminal.y - (CIRCLESIZE/2), CIRCLESIZE, CIRCLESIZE);
                break;
  		case 1:g.drawLine(lineStart.x, lineStart.y, lineTerminal.x, lineTerminal.y);
  		       break;
  		case 2:g.drawRect(Math.min(lineStart.x,lineTerminal.x),Math.min(lineStart.y,lineTerminal.y),
		           Math.abs(lineStart.x-lineTerminal.x),Math.abs(lineStart.y-lineTerminal.y));
    	       break;
    	case 3:g.drawOval(Math.min(lineStart.x,lineTerminal.x),Math.min(lineStart.y,lineTerminal.y),
		           Math.abs(lineStart.x-lineTerminal.x),Math.abs(lineStart.y-lineTerminal.y));
    	       break;    
    	case 4:g.fillRect(Math.min(lineStart.x,lineTerminal.x),Math.min(lineStart.y,lineTerminal.y),
		           Math.abs(lineStart.x-lineTerminal.x),Math.abs(lineStart.y-lineTerminal.y));
    	       break;
    	case 5:g.fillOval(Math.min(lineStart.x,lineTerminal.x),Math.min(lineStart.y,lineTerminal.y),
		           Math.abs(lineStart.x-lineTerminal.x),Math.abs(lineStart.y-lineTerminal.y));
  	   }
  }
  
  ////////////////////////
  public void paint(Graphics g)
  {
	super.paint(g);
		
	//paint things in buffer 
	for(int i=0;i<shownumber;i++)
  	{
  		switch(buffer[0+i*6])
        {
    	case -1:g.setColor(getBackground());
    	        break;
    	case 0:g.setColor(Color.black);
    	       break;
        case 1:g.setColor(Color.green);
               break;
        case 2:g.setColor(Color.red);
               break; 
        case 3:g.setColor(Color.yellow);
               break;
        }
  	
     	switch(buffer[1+i*6])
  	    {
  		case -1:g.fillOval(buffer[4+i*6] - (CIRCLESIZE/2),
                           buffer[5+i*6] - (CIRCLESIZE/2), CIRCLESIZE, CIRCLESIZE);
                break;
  		case 1:g.drawLine(buffer[2+i*6], buffer[3+i*6], buffer[4+i*6], buffer[5+i*6]);
  		       break;
  		case 2:g.drawRect(Math.min(buffer[2+i*6],buffer[4+i*6]),Math.min(buffer[3+i*6],buffer[5+i*6]),
		           Math.abs(buffer[2+i*6]-buffer[4+i*6]),Math.abs(buffer[3+i*6]-buffer[5+i*6]));
    	       break;
    	case 3:g.drawOval(Math.min(buffer[2+i*6],buffer[4+i*6]),Math.min(buffer[3+i*6],buffer[5+i*6]),
		           Math.abs(buffer[2+i*6]-buffer[4+i*6]),Math.abs(buffer[3+i*6]-buffer[5+i*6]));
    	       break;    
    	case 4:g.fillRect(Math.min(buffer[2+i*6],buffer[4+i*6]),Math.min(buffer[3+i*6],buffer[5+i*6]),
		           Math.abs(buffer[2+i*6]-buffer[4+i*6]),Math.abs(buffer[3+i*6]-buffer[5+i*6]));
    	       break;
    	case 5:g.fillOval(Math.min(buffer[2+i*6],buffer[4+i*6]),Math.min(buffer[3+i*6],buffer[5+i*6]),
		           Math.abs(buffer[2+i*6]-buffer[4+i*6]),Math.abs(buffer[3+i*6]-buffer[5+i*6]));
  	    }
  	}
	
    if(isdraw == true)
	{
		if(whetherintobuffer == false)
	    {
	    	drawnow(g);
	    }//if
  	
  	    else 
  	    {
  	    	buffer[bufferindex++] = pencolor;
  	        buffer[bufferindex++] = drawingmethod;
  	        buffer[bufferindex++] = lineStart.x;
  	        buffer[bufferindex++] = lineStart.y;
  	        buffer[bufferindex++] = lineTerminal.x;
  	        buffer[bufferindex++] = lineTerminal.y;
            shownumber++;
            drawnow(g);
  		}//else
	}//if
  }//paint
 
  public void mouseClicked(MouseEvent e)
  {   
  }

  public void mouseEntered(MouseEvent e)
  {
  }

  public void mouseExited(MouseEvent e)
  {
  }
  
  //when mouse is pressed  
  public void mousePressed(MouseEvent e)
  {
  	lineStart.move(e.getX(), e.getY());
  }
  
  //when mouse is released
  public void mouseReleased(MouseEvent e)
  {
    lineTerminal.move(e.getX(), e.getY());
    whetherintobuffer = true;
    repaint();
  }
  
  //when mouse is dragged
  public void mouseDragged(MouseEvent e)
  {
    if(drawingmethod == 0)
    {
    	g = getGraphics();

        if (e.isMetaDown()) // Detect if the right button is pressed
        {
            // Erase the drawing using an oval
            /*drawingmethod = -1;
            pencolor = -1;
            lineTerminal.move(e.getX(), e.getY());
            whetherintobuffer = true;
            repaint();
            drawingmethod = 0;*/ 
            g.setColor(getBackground());
            g.fillOval(e.getX() - (CIRCLESIZE/2), e.getY() - (CIRCLESIZE/2), 
                       CIRCLESIZE, CIRCLESIZE);
            buffer[bufferindex++] = -1;
  	        buffer[bufferindex++] = 5;
  	        buffer[bufferindex++] = e.getX() - (CIRCLESIZE/2);
  	        buffer[bufferindex++] = e.getY() - (CIRCLESIZE/2);
  	        buffer[bufferindex++] = e.getX() - (CIRCLESIZE/2)+CIRCLESIZE;
  	        buffer[bufferindex++] = e.getY() - (CIRCLESIZE/2)+CIRCLESIZE;
            shownumber++;
        }
        
        else
        {
            switch(pencolor)
            {
            	case 0:g.setColor(Color.black);
            	       break;
            	case 1:g.setColor(Color.green);
                       break;
                case 2:g.setColor(Color.red);
                       break; 
                case 3:g.setColor(Color.yellow);
                       break;
            }
            g.drawLine(lineStart.x, lineStart.y, e.getX(), e.getY());
            buffer[bufferindex++] = pencolor;
  	        buffer[bufferindex++] = 1;
  	        buffer[bufferindex++] = lineStart.x;
  	        buffer[bufferindex++] = lineStart.y;
  	        buffer[bufferindex++] = e.getX();
  	        buffer[bufferindex++] = e.getY();
            shownumber++;
        }

        lineStart.move(e.getX(), e.getY());

        //Dispose this graphics context
        //g.dispose();
    }
    //if not draw Scribble
    else
    {
    	lineTerminal.move(e.getX(), e.getY());
    	whetherintobuffer = false;
    	repaint();
    }
  }

  public void mouseMoved(MouseEvent e)
  {
  	g = getGraphics();
  	if(clearup == true)
  	{
  		g.clearRect(0,0,getWidth(),getHeight());
  		shownumber = 0;
  		bufferindex = 0;
  		clearup = false;
    }
  }
}

⌨️ 快捷键说明

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