📄 canvas2.java
字号:
//在画布上手工画图
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
public class Canvas2 extends Applet implements ActionListener {
Button line, point, clear;
MyCanvas2 c;
public void init() {
c=new MyCanvas2();
c.setSize(350,200);
c.setBackground(Color.green);
line=new Button("画线");
point=new Button("画点");
clear=new Button("清除");
add(line);
add(point);
add(clear);
add(c);
line.addActionListener(this);
point.addActionListener(this);
clear.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==line)// 设为画直线模式
c.mode=0;
else if (e.getSource()==point)// 设为画连续点模式
c.mode=1;
else if (e.getSource()==clear) {// 清除画面
c.points=new Vector();
c.x1= -1;
c.repaint();
}
}
}
class MyCanvas2 extends Canvas implements MouseListener,MouseMotionListener {
int x1, y1, x2, y2, mode;
Vector points=new Vector();
MyCanvas2() {
addMouseListener(this);
addMouseMotionListener(this);
}
public void paint(Graphics g) {
for (int i=0;i<points.size();i++) { // 所有操作结果被重新画出
Rectangle r=(Rectangle)points.elementAt(i);
g.drawLine(r.x, r.y, r.width, r.height);
}
if (x1!= -1 && mode ==0)//画当前直线
g.drawLine(x1, y1, x2, y2);
}
public void mousePressed(MouseEvent e) {// 记录起点坐标
x1=e.getX();
y1=e.getY();
}
public void mouseDragged(MouseEvent e) {
if (mode==0) {// 记录当前坐标
x2=e.getX();
y2=e.getY();
}
else {// 画连续点时保存每一个笔画的起点和当前坐标
points.addElement(new Rectangle(x1, y1, e.getX(), e.getY()));
x1=e.getX();
y1=e.getY();
}
repaint();
}
public void mouseReleased(MouseEvent e) {
if (mode==0)// 保存当前直线的起点和终点坐标
points.addElement(new Rectangle(x1, y1, e.getX(), e.getY()));
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -