?? drawingmethod.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 + -