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);	// 字符之间的间隔
		}
	}
}

 

posted @ 2018-01-17 13:45  半生戎马,共话桑麻、  阅读(404)  评论(0)    收藏  举报
levels of contents