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
- JAVA test_MouseAdapter
- java
- JAVA
- JAVA
- JAVA
- java
- Java
- Java
- JAVA:
- java
- java
- java
- java
- Java
- java
- java
- java
- JAVA?
- 仿新浪微博2014之登陆界面二(异步加载图片和缓存)
- html鼠标指针变化控制
- WINCE下使用SQLite数据库
- AJAX 跨域请求 - JSONP获取JSON数据
- python中如何调用shell
- JAVA test_MouseAdapter
- JAVA中String的深入研究
- CentOS 6.2+Nginx+Nagios,手机短信和qq邮箱提醒
- Poj 1050
- warning C4244: '=' : conversion from 'int' to 'float', possible loss of data
- 高效开发Android App的10个建议
- [笨笨的方法] 实现IOS列表的滑动删除效果
- ecshop去掉头部和页尾版权,以及乱跑的Powered by ECShop v2.7.2
- 数据类型和字符编码的关系