JAVA test_MouseAdapter

来源:互联网 发布:剑桥 知乎 编辑:程序博客网 时间:2024/06/06 03:13

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

实现代码:

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