JAVA test_MouseAdapter

跟着网上的视频写的一个小程序,作用是输出一个界面,在这个界面内鼠标每点击一下,就在鼠标点击的地方产生一个小圆圈。

实现代码:

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class Main {
	public static void main(String[] args) {
		new MyFrame().MyFrame();
	}
}

class MyFrame extends Frame {
	ArrayList points = new ArrayList();
	Point p = null;

	public void MyFrame() {
		setLayout(null);
		setBounds(100, 100, 300, 300);
		this.setBackground(Color.BLACK);
		addMouseListener(new monitor());
		setVisible(true);
	}

	class monitor extends MouseAdapter {
		public void mousePressed(MouseEvent e) {
			addPoint(new Point(e.getX(), e.getY()));
			p = (Point) (new Point(e.getX(), e.getY()));
			repaint();
		}
	}

	public void paint(Graphics e) {
		Iterator i = points.iterator();
		while (i.hasNext()) {
			Point p = (Point) i.next();
			e.setColor(Color.WHITE);
			e.fillOval(p.x, p.y, 10, 10);
		}
	}

	/*
	 * public void paint(Graphics e) { e.setColor(Color.WHITE); e.fillOval(p.x,
	 * p.y, 10, 10); }
	 */
	public void addPoint(Point x) {
		points.add(x);
	}
}
/*
 * class monitor extends MouseAdapter { public void mousePressed(MouseEvent e) {
 * MyFrame f = (MyFrame) (e.getSource()); f.addPoint(new Point(e.getX(),
 * e.getY())); f.repaint(); } }
 */

关于代码中的paint()方法我有一个疑问,就是为什么每次都要将points中记录的所有的点重新画一遍,所以我尝试了一下,每次不对所有点重画,每次只画鼠标点击的那个点。

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class Main {
	public static void main(String[] args) {
		new MyFrame().MyFrame();
	}
}

class MyFrame extends Frame {
	ArrayList points = new ArrayList();
	Point p = null;

	public void MyFrame() {
		setLayout(null);
		setBounds(100, 100, 300, 300);
		this.setBackground(Color.BLACK);
		addMouseListener(new monitor());
		setVisible(true);
	}

	class monitor extends MouseAdapter {
		public void mousePressed(MouseEvent e) {
			addPoint(new Point(e.getX(), e.getY()));
			p = (Point) (new Point(e.getX(), e.getY()));
			repaint();
		}
	}

	/*
	 * public void paint(Graphics e) { Iterator i = points.iterator(); while
	 * (i.hasNext()) { Point p = (Point) i.next(); e.setColor(Color.WHITE);
	 * e.fillOval(p.x, p.y, 10, 10); } }
	 */
	public void paint(Graphics e) {
		e.setColor(Color.WHITE);
		e.fillOval(p.x, p.y, 10, 10);
	}

	public void addPoint(Point x) {
		points.add(x);
	}
}
/*
 * class monitor extends MouseAdapter { public void mousePressed(MouseEvent e) {
 * MyFrame f = (MyFrame) (e.getSource()); f.addPoint(new Point(e.getX(),
 * e.getY())); f.repaint(); } }
 */

可以看到,两次得到的结果是不同的:


左边为第一次的效果,右边为第二次的效果。

第一个代码中每次点击一下界面中就增加了一个点,第二个代码中每次点击一下界面中增加一个点,之前的点消失。

即每次的重画都是对整个界面的重画,不是在原来的界面上添加了一个圆圈。是重画,不是添加。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值