Java画图4

public class PaintUtil4 extends JPanel {
	/**
	 * 动态图片+鼠标
	 */
	private static final long serialVersionUID = -5247450804494766145L;
	private static BufferedImage image;
	int y = 0;
	int y1 = -600;
	int fontx;
	int fonty;

	static {
		image = loadImage("background.png");
	}

	/** 读取图片 */
	public static BufferedImage loadImage(String fileName) {
		try {
			// 同包下读取图片
			BufferedImage img = ImageIO.read(PaintUtil4.class.getResource(fileName));
			return img;
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException();
		}
	}

	private void backgroundLogic() {
		y += 5;
		y1 += 5;
		if (y >= 600) {
			y = -600;
		}
		if (y1 >= 600) {
			y1 = -600;
		}
	}

	/** 启动程序的执行 */
	public void action() {
		// 侦听器对象
		MouseAdapter l = new MouseAdapter() {
			/** 重写mouseMoved()鼠标移动 */
			public void mouseMoved(MouseEvent e) {
					fontx = e.getX(); // 获取鼠标的x坐标
					fonty = e.getY(); // 获取鼠标的y坐标
			}

			/** 重写mouseClicked()鼠标点击 */
			public void mouseClicked(MouseEvent e) {
				
			}

			/** 重写mouseExited()鼠标移出 */
			public void mouseExited(MouseEvent e) {
				
			}

			/** 重写mouseEntered()鼠标移入 */
			public void mouseEntered(MouseEvent e) {
				
			}
		};
		this.addMouseListener(l); // 处理鼠标操作事件
		this.addMouseMotionListener(l); // 处理鼠标滑动事件

		Timer timer = new Timer(); // 定时器对象
		int interval = 10; // 以毫秒为单位
		timer.schedule(new TimerTask() {
			public void run() { // 定时干的那个事(每10毫秒走一次)
				backgroundLogic();

				repaint(); // 重画(重新调用paint())
			}
		}, interval, interval); // 定时计划
	}

	/** 重写paint()画 g:画笔 */
	public void paint(Graphics g) {
		g.drawImage(image, 0, y, null);// 在坐标(0,0)处画图,先画图再写字,不然会覆盖
		g.drawImage(image, 0, y1, null);// 在坐标(0,0)处画图,先画图再写字,不然会覆盖

		g.setColor(Color.red);// 设置颜色
		g.drawString("abcde", 111, 111);// 打字
		g.drawString("ABCDE", fontx, fonty);

	}

	public static void main(String[] args) {
		JFrame frame = new JFrame("打飞机");
		PaintUtil4 pu = new PaintUtil4();// 要求PaintUtil4是继承 JPanel父类

		frame.add(pu);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(400, 600);
		frame.setLocationRelativeTo(null); // 中间
		frame.setVisible(true); // 1)设计窗口可见 2)尽快调用paint()

		pu.action();// 执行才会动态
	}
}

结果:背景图向下移动,ABCDE字母随鼠标移动

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值