zoukankan      html  css  js  c++  java
  • java动态画圈圈。运用多线程,绘图

    总结:只是意外的收获吧。之前一篇是老师教的,一个点,从底层开始升起,到鼠标按下的地方开始画圈圈,

    现在改变了一下,因为点上升的一个循环和画圈的循环是分开的

    现在让点点自己跑,并且边跑边画圈。而且在for循环的最大值时终止“绽放”。很美

    package com.aa;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.Random;
    
    //实现一个礼花绽放的界面
    import javax.swing.*;
    
    public class Test6 {
    
    	public static void main(String[] args) {
    		JPanel jp = new JPanel();
    		JFrame f = new JFrame();
    		JLabel jl = new JLabel("周杰伦周杰伦周杰伦周杰伦周杰伦");
    		jl.setForeground(Color.red);// 字体设置红色
    		jl.setFont(new Font("", Font.ITALIC, 42));
    		JLabel jl2 = new JLabel("听妈妈的话");
    		jl2.setForeground(Color.green);
    		jl2.setFont(new Font("", Font.TRUETYPE_FONT, 33));
    		// f.setBackground(Color.black);//frame是块玻璃,不能直接添加背景颜色
    		f.setDefaultCloseOperation(3);
    		Panel p = new Panel();
    		p.add(jl);// 将label添加到panel里面
    		p.add(jl2);
    		p.setBackground(Color.black);// 这里还是改成
    		f.add(p);//
    		f.setVisible(true);
    		f.setBounds(100, 200, 500, 500);
    	}
    }
    
    class Panel extends JPanel implements Runnable, MouseListener, ActionListener {// 实现Runnable接口
    
    	int x, y;
    
    	public Panel() {
    		this.addMouseListener(this);
    		this.setBackground(Color.green);//
    
    	}
    
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void mousePressed(MouseEvent e) {
    		x = e.getX();
    		y = e.getY();
    		Thread t = new Thread(this);
    		t.start();
    
    	}
    
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void mouseEntered(MouseEvent e) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void mouseExited(MouseEvent e) {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void run() {
    		int xx = x;
    		int yy = y;
    		int max_y = 450;
    		while (yy < max_y) {
    			Graphics g = this.getGraphics();// 绘图的方法
    			g.setColor(Color.yellow);
    			g.fillOval(xx, max_y = max_y - 10, 10, 10);
    			// 这里睡眠是小点点上升的时间吗?
    			try {
    				Thread.currentThread().sleep(60);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			g.setColor(Color.black);
    			g.fillOval(xx, max_y, 10, 10);
    			// 把for循环放在while循环里了,所以点点跑哪里它就画哪里
    			Random r = new Random();
    			for (int i = 0; i < 30; i++) {
    				// g.setColor(Color.green);
    				g.setColor(new Color(r.nextInt(255), r.nextInt(255), r
    						.nextInt(255)));
    				g.drawOval(xx - i * 1, max_y - i * 1, i * 2, i * 2);
    				g.drawOval(xx - i * 2, max_y - 2 * i, i * 4, i * 4);
    				g.drawOval(xx - i * 3, max_y - i * 3, i * 6, i * 6);
    				try {
    					Thread.currentThread().sleep(60);
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				// 这里涉及一个睡眠,这个睡眠是每一次画圈后的等待时间吗?,还是点击其他点点的间隔时间
    				g.setColor(Color.black);// 画笔的颜色
    				g.drawOval(xx - i * 1, max_y - i * 1, i * 2, i * 2);
    				g.drawOval(xx - i * 2, max_y - 2 * i, i * 4, i * 4);
    				g.drawOval(xx - i * 3, max_y - i * 3, i * 6, i * 6);
    
    			}
    
    		}
    
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    
    	}
    
    }
    

      

  • 相关阅读:
    win8 连接到OneDrive时出现问题-感叹号
    让tp6显示详细的错误信息及行号
    TP6出现错误 No input file specified.
    Git 访问慢 解决办法
    mysql5.7当两个字段名类似,查询时会出错
    linux停止进程
    mysql更新数据时:当想mysql某插入有某字段设置了unique且和之前相同时,会报错,并停止运行
    php升级版本后的影响5.5->7.1


  • 原文地址:https://www.cnblogs.com/langlove/p/3473715.html
Copyright © 2011-2022 走看看