闪动的小星星
一.最终需求:
二.涉及到的知识:
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();
}
}
本内容由安康学院”雨季”原创!