博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现点击在当前位置画一个黑点,打印出当前点击的坐标
阅读量:6868 次
发布时间:2019-06-26

本文共 3582 字,大约阅读时间需要 11 分钟。

没看懂repaint()的实现,找源码也没找到paint,都没调用重写的paint,那是怎么画出黑点的呢?

******************************************

打开repaint,上面有提示see update,点开update发现paint,这里的原理是一种回调,传统的paint每次画都是重新绘制一个屏幕,随着东西越来越多,绘制的东西也就越来越多,而repaint则是在指定的dirty区域重新绘制,提高了效率。

App.java:

package com.zmz.ui;public class App {	public static void main(String[] args) {		GameFrame frame = new GameFrame();		GamePanel panel = new GamePanel();				frame.add(panel);		frame.setVisible(true);	}}
GameFrame.java:

package com.zmz.ui;import javax.swing.JFrame;/** * 游戏窗口 *  * @author Administrator * */public class GameFrame extends JFrame {	// 类长什么样子由构造方法决定		/**	 * 构造方法初始化	 */	public GameFrame() {		setTitle("五子棋");		setSize(506, 528);		setResizable(false);// 不可调大小		setLocationRelativeTo(null);// 放中间		setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭窗口	}}
GamePanel.java:

package com.zmz.ui;import java.awt.Color;import java.awt.Graphics;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JPanel;import javax.swing.Timer;public class GamePanel extends JPanel{		int x = 0;		Point[] ps =  new Point[50];	int psSize = 0;	/**	 * 构造方法	 */	public GamePanel() {		//注册鼠标监听器//		addMouseListener(new Listener());				//适配器模式		addMouseListener(new MListener());//		addMouseMotionListener(l);//		addMouseWheelListener(l);				//自动重绘制		//定时器,每隔0.02s调用一次Timerlistener里面的方法,		//1000是1s//		Timer timer = new Timer(20, new Timerlistener());//			  timer.start();	}		int w;	int h;		@Override	public void paint(Graphics g) {		// TODO Auto-generated method stub		super.paint(g);		w = getWidth();		h = getHeight();		for(int i = 0; i < psSize; i++) {			Point point = ps[i];			//画图			g.fillOval(point.x, point.y, 10, 10);		}//		g.drawLine(100, 100, 100, 100);//		g.drawOval(0, 0, 300, 200);//内切圆		//		g.setColor(new Color(0, 255, 0, 100));//		g.drawRect(w/2-150, h/2-150,300,300);		g.setColor(Color.BLUE);//		g.setColor(new Color(255, 0, 0,100));//最后一个为透明度//		g.drawOval(w/2-150, h/2-150,300,300);//左上角点和长宽//		//		g.fillArc(w/2-150, h/2-150, 300, 300, x, 60);//		g.fillArc(w/2-150, h/2-150, 300, 300, x+120, 60);//		g.fillArc(w/2-150, h/2-150, 300, 300, x+240, 60);//逆时针	}		//		class Listener implements MouseListener {//			@Override//			public void mouseClicked(MouseEvent e) {//				System.out.println("鼠标点击");//				x += 15;//				if(x > 360) {//					x = 0;//				}//				// 重绘制//				repaint();//			}////			@Override//			public void mousePressed(MouseEvent e) {//				System.out.println("按下");//			}////			@Override//			public void mouseReleased(MouseEvent e) {//				System.out.println("释放");//			}////			@Override//			public void mouseEntered(MouseEvent e) {//				System.out.println("进入");//			}////			@Override//			public void mouseExited(MouseEvent e) {//				System.out.println("离开");//			}//			//		}				class Timerlistener implements ActionListener {			@Override			public void actionPerformed(ActionEvent e) {				// TODO Auto-generated method stub				x += 15;				if(x > 360) {					x = 0;				}				repaint();			}					}				class MListener extends MouseAdapter {			@Override			public void mouseClicked(MouseEvent e) {				// TODO Auto-generated method stub//				super.mouseClicked(e);				//这个对象e可以获得光标的信息,坐标,压力等等				System.out.println(e.getX()+", "+e.getY());								Point point = new Point(e.getX(), e.getY());				ps[psSize++] = point;				int ox = e.getX();				int oy = e.getY();								x += 15;				if(x > 360) {					x = 0;				}				repaint();			}		}		}

转载于:https://www.cnblogs.com/zhangmingzhao/p/7256591.html

你可能感兴趣的文章
重庆哪家美术生集训好
查看>>
Axure多媒体元建,请自取
查看>>
kotlin幕后字段和幕后属性解析
查看>>
【核心模块】node.js
查看>>
苹果开发者账号团队代理转移
查看>>
JS 总结之原型继承的几种方式
查看>>
Android微信分享多张图片和文字(发朋友圈)
查看>>
社交电商的 “比基尼”,被云集跑出会员的力量
查看>>
创建和销毁对象
查看>>
vue中引入.svg图标
查看>>
Django3-打包自己的应用程序
查看>>
[译] 正确实现 linkedPurchaseToken 以避免重复订阅
查看>>
SpringBoot2.0 整合 RocketMQ ,实现请求异步处理
查看>>
Verdaccio 搭建私有 NPM
查看>>
java11新特性---Nest-Based Access Control(嵌套访问控制)
查看>>
(七)微服务分布式云架构spring cloud - common-service 项目构建过程
查看>>
Node.js买卖比特币 教程
查看>>
ios讯飞输入与ios自带输入法语音测试
查看>>
mac开发环境工具推荐
查看>>
css之半透明边框
查看>>