五彩的闪动的小星星

来源:互联网 发布:怎么运行mysql 编辑:程序博客网 时间:2024/04/28 12:23

闪动的小星星

一.最终需求:

二.涉及到的知识:

JavaSE中Swing ,Random(),paint(),repaint();Timer(),

Toolkit.getDefaultToolkit().getScreenSize(),鼠标事件,

三.设计思路(倒序思想)

 1.先定义一个窗体,即 new Star();

 2.再定义一个面板,这个面板用于显示内容,用paint(Graphics g)函数来绘制。

 3.将面板加入到窗体中,给窗体要显示的大小并且为视图可见。

4.此时运行只有一次绘制,我们可以使用多线程来使的它隔一段时间重绘一次,但是有更好的方法,定时器。再结合repaint()这个方法,实现隔一段时间重绘的效果。

5.加入事件处理,使得功能更人性化。

四.源代码:

package com.star;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Toolkit;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.Random;

import java.util.Timer;

import java.util.TimerTask;

 

import javax.swing.JFrame;

import javax.swing.JPanel;

class MyPanel extends JPanel{

       private static final longserialVersionUID = 1L;

       int starNum=200;

       int[] x=new int[starNum];

       int[] y=new int[starNum];

       Random r=new Random();

       //构造函数

       public MyPanel(){

              setBackground(Color.black);

       }

       @Override

       public void paint(Graphicsg) {

              super.paint(g);

             

              //绘制月亮

              g.setColor(Color.white);//设置画笔颜色

              g.fillOval(800, 100,100, 100);

              g.setColor(Color.black);//设置画笔为黑色

              g.fillOval(770, 100,100,100);

              for (int i = 0; i<starNum; i++) {

                     intstarSize=r.nextInt(50);

                     Font font=newFont("宋体",Font.BOLD,starSize);

                     Colorcolor=new Color(r.nextInt(0xFFFFFF));

                     g.setFont(font);

                     g.setColor(color);

                     x[i]=r.nextInt(Star.dd.width);

                     y[i]=r.nextInt(Star.dd.height);

                     g.drawString("*",x[i], y[i]);

              }

       }

       public void move() {

               Timer timer=new Timer();

               timer.schedule(new TimerTask() {

                     @Override

                     public voidrun() {

                            repaint();

                     }

              },300,300);

       }

}

public class Star extends JFrame{

       private static final longserialVersionUID = 1L;

       //获取屏幕尺寸(全屏显示)

       public static Dimensiondd=Toolkit.getDefaultToolkit().getScreenSize();

       //构造方法

       public Star(){

              //将面板添加到窗体

              MyPanel pane=newMyPanel();

              pane.move();

              add(pane); //添加到窗体

              setSize(dd.width,dd.height);

              //去掉窗体边框修饰

              setUndecorated(true);

              //显示界面

              setVisible(true);

        //添加监听器,用户交互,鼠标安息下后退出本程序           

              MouseAdapter ma=newMouseAdapter() {

                     @Override

                     public voidmousePressed(MouseEvent e) {

                            System.exit(0);

                     }

              };

            addMouseListener(ma);

       }

       public static voidmain(String[] args) {

           new Star();

       }

}

微笑微笑本内容由安康学院”雨季”原创!

 


原创粉丝点击