一起来看流星雨
我打算今晚回宿舍前把这个代码重写在CSDN上默写一遍,这个flag回倒吗?我五小时后来回复。
package nlday03;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Star extends Frame implements ActionListener {
public static final int FRAME_WIDTH = 800;
public static final int FRAME_LENGTH = 600;//定义框架尺寸
Toolkit tk = Toolkit.getDefaultToolkit(); // 获取屏幕的尺寸
Dimension screenSize = tk.getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
int[] x = new int[60];
int[] y = new int[60];
Image image = null; // 定义画布
MenuBar jmb = null; // 定义菜单吧台
Menu jm, jma = null; // 定义菜单
MenuItem jmi1, jmi2, jma1, jma2 = null; // 定义子菜单
boolean printable = true;
int flag = 10;
public static void main(String[] args) {
new Star();
}
public void update(Graphics g) {
image = this.createImage(FRAME_WIDTH, FRAME_LENGTH);
Graphics gps = image.getGraphics(); ***// 获取画布的画笔* **
framePaint(gps);
g.drawImage(image, 0, 0, null); // 将每次产生的图片覆盖Frame框
}
private void framePaint(Graphics g) {
g.setFont(new Font("", Font.BOLD, 20));
g.setColor(Color.yellow);
g.fillOval(100, 100, 100, 100);
g.setColor(Color.pink);
g.fillOval(75, 75, 100, 100); // 用g画会闪
for (int i = 0; i < x.length; i++) {
int R = (int) (Math.random() * 255);
int G = (int) (Math.random() * 255);
int B = (int) (Math.random() * 255);
g.setColor(new Color(R, G, B));
g.drawString("★", x[i]++ % FRAME_WIDTH, y[i]++ % FRAME_LENGTH); // if(x[i]>800)
// x[i]=800;
// if(y[i]>600)
// y[i]=600;
}
}
public Star() {
jmb = new MenuBar(); // 初始化菜单吧台
jm = new Menu("stop/continue"); // 初始化菜单
jma = new Menu("加速/减速");
jmb.add(jm);
jmb.add(jma);
jmi1 = new MenuItem("stop"); // 初始化子菜单
jmi1.addActionListener(this);
jmi1.setActionCommand("Stop");
jma1 = new MenuItem("加速");
jma1.addActionListener(this);
jma1.setActionCommand("ACC");
jmi2 = new MenuItem("continue");
jmi2.addActionListener(this);
jmi2.setActionCommand("Continue");
jma2 = new MenuItem("减速");
jma2.addActionListener(this);
jma2.setActionCommand("DEC");
jm.add(jmi1);
jm.add(jmi2);
jma.add(jma1);
jma.add(jma2);
for (int i = 0; i < x.length; i++) {
x[i] = (int) (Math.random() * 800);
y[i] = (int) (Math.random() * 550) + 50;
}
this.setMenuBar(jmb); // 将菜单吧台设置到框上
this.setVisible(true); // 设置窗口可见
this.setSize(FRAME_WIDTH, FRAME_LENGTH); // 设置窗口大小、设置窗口关闭模式
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// frame窗如何关闭窗口
this.setResizable(false); // 设置窗口大小不可变
this.setLocation(screenWidth / 2 - FRAME_WIDTH / 2, screenSize.height / 2 - FRAME_LENGTH / 2);
this.setBackground(Color.pink);
this.setTitle("和朱月一起看流星雨!");
new Thread(new PaintThread()).start();
}
private class PaintThread implements Runnable {
@Override
public void run() {
while (printable) { // 绘制、刷新闪烁、当做线程任务去做
repaint();
try {
Thread.sleep(flag);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Stop")) {
System.out.println("我点击了暂停");
printable = false;
} else if (e.getActionCommand().equals("Continue")) {
System.out.println("我点击了继续");
if (!printable) {
printable = true;
new Thread(new PaintThread()).start();
}
} else if (e.getActionCommand().equals("ACC")) {
System.out.println("我点击了加速");
flag = 1;
} else if (e.getActionCommand().equals("DEC")) {
System.out.println("我点击了减速");
flag = 100;
}
}
}
效果图如下,本着少女心,把黑色星空改成粉色~