zoukankan      html  css  js  c++  java
  • 实现点击在当前位置画一个黑点,打印出当前点击的坐标

    没看懂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();
    			}
    		}
    	
    	
    }	
    


  • 相关阅读:
    Appium+Python移动端(Android)自动化测试环境搭建
    我的python笔记06
    我的python笔记05
    Monkey如何使用
    android studio 虚拟机adb.exe已停止工作的处理
    完整的整车开发流程
    汽车行业项目管理
    分析几种常见的汽车电子技术应用与发展
    打印流
    序列化流
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256591.html
Copyright © 2011-2022 走看看