📄 paintboard.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
/**
* @author aassd
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class PaintBoard extends Canvas implements java.awt.event.MouseListener, java.awt.event.MouseMotionListener {
int srcX = 0;
int srcY = 0;
int lineToX = 0;
int lineToY = 0;
boolean bMousePressing = false;
java.util.Stack vShapes = new java.util.Stack();
java.util.Stack vDelShapes = new java.util.Stack();
private int command = 0;
private Color color;
public void undo() {
if (vShapes.size() > 0) {
Object shape = vShapes.pop();
vDelShapes.push(shape);
repaint();
}
}
public void redo() {
if (vDelShapes.size() > 0) {
Object shape = vDelShapes.pop();
vShapes.push(shape);
repaint();
}
}
public void setCommand(int command) {
this.command = command;
}
public void setColor(Color color) {
this.color = color;
}
public PaintBoard() {
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void paint(Graphics g) {
Dimension size = size();
int width = size.width ;
int height = size.height;
g.setColor(Color.white);
g.fillRect(0,0, width,height);
Shape shape = null;
java.util.Enumeration enumeration = vShapes.elements();
g.setColor(Color.blue);
while (enumeration.hasMoreElements()) {
shape = (Shape) enumeration.nextElement();
shape.draw(g);
}
if (bMousePressing) {
g.setColor(color);
switch (command) {
case Command.LINE:
g.drawLine(srcX, srcY, lineToX, lineToY);
break;
case Command.RECTANGLE:
if (lineToX < srcX) {
if (lineToY < srcY) {
g.drawRect(lineToX, lineToY, srcX - lineToX , srcY - lineToY);
}
else {
g.drawRect(lineToX, srcY, srcX - lineToX, lineToY - srcY);
}
}
else {
if (lineToY < srcY) {
g.drawRect(srcX, lineToY, lineToX - srcX, srcY - lineToY);
}
else {
g.drawRect(srcX, srcY, lineToX - srcX, lineToY - srcY);
}
}
break;
case Command.CIRCLE:
int w = (int)java.lang.Math.sqrt((srcX - lineToX) * (srcX - lineToX) + (srcY - lineToY) * (srcY - lineToY));
g.drawArc(srcX - w/2, srcY - w/2, w, w, 0, 360);
break;
}//End switch(command)
}
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
srcX = e.getX();
srcY = e.getY();
bMousePressing = true;
}
public void mouseReleased(MouseEvent e) {
lineToX = e.getX();
lineToY = e.getY();
bMousePressing = false;
switch (command) {
case Command.LINE:
ILine line = new ILine(srcX, srcY, lineToX, lineToY, color);
vShapes.push(line);
break;
case Command.RECTANGLE:
IRectangle rectangle = null;
if (lineToX < srcX) {
if (lineToY < srcY) {
rectangle = new IRectangle(lineToX, lineToY, srcX - lineToX , srcY - lineToY, color);
}
else {
rectangle = new IRectangle(lineToX, srcY, srcX - lineToX, lineToY - srcY, color);
}
}
else {
if (lineToY < srcY) {
rectangle = new IRectangle(srcX, lineToY, lineToX - srcX, srcY - lineToY, color);
}
else {
rectangle = new IRectangle(srcX, srcY, lineToX - srcX, lineToY - srcY, color);
}
}
vShapes.push(rectangle);
break;
case Command.CIRCLE:
int w = (int)java.lang.Math.sqrt((srcX - lineToX) * (srcX - lineToX) + (srcY - lineToY) * (srcY - lineToY));
ICircle circle = new ICircle(srcX - w/2, srcY - w/2, w, w, color);
vShapes.push(circle);
break;
} //End switch(command)
repaint();
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
lineToX = e.getX();
lineToY = e.getY();
repaint();
}
public void mouseMoved(MouseEvent e) {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -