跟着网上的视频写的一个小程序,作用是输出一个界面,在这个界面内鼠标每点击一下,就在鼠标点击的地方产生一个小圆圈。
实现代码:
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(); } }
*/
可以看到,两次得到的结果是不同的:
左边为第一次的效果,右边为第二次的效果。
第一个代码中每次点击一下界面中就增加了一个点,第二个代码中每次点击一下界面中增加一个点,之前的点消失。
即每次的重画都是对整个界面的重画,不是在原来的界面上添加了一个圆圈。是重画,不是添加。