23.模拟一个电子白板,可以用鼠标在上面绘画,可用键盘在上面写字
效果:

package com.lvshitech.gui;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JApplet;
public class MouseAndKeyDemo extends JApplet {
private int lastX = 0, lastY = 0;
public void init() {
setBackground(Color.WHITE);
setForeground(Color.blue);
addMouseListener(new PositionRecorder());
addMouseMotionListener(new LineDrawer());
addKeyListener(new CharDrawer());
}
// 位置点赋值
protected void record(int x, int y) {
lastX = x;
lastY = y;
}
// 位置点记录
private class PositionRecorder extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
record(e.getX(), e.getY()); // 赋值当前点
}
@Override
public void mouseEntered(MouseEvent e) {
requestFocus();
record(e.getX(), e.getY());
}
}
// 画线
private class LineDrawer extends MouseMotionAdapter {
@Override
public void mouseDragged(MouseEvent e) {
// 当前点
int x = e.getX();
int y = e.getY();
// 前一点和当前点之间连线
Graphics g = getGraphics();
g.drawLine(lastX, lastY, x, y);
// 把当前点作为前一点继续划线
record(x, y);
}
}
// 获取键盘输入的字符
private class CharDrawer extends KeyAdapter {
@Override
public void keyTyped(KeyEvent e) {
String s = String.valueOf(e.getKeyChar());
getGraphics().drawString(s, lastX, lastY);
record(lastX+11, lastY); // 字符之间的间隔
}
}
}

浙公网安备 33010602011771号