关于java JFrame 以及多线程

来源:百度知道 编辑:UC知道 时间:2024/06/06 14:39:53
题目:写一个程序,该程序启动后出现一个窗口,窗口上有一个按钮,按一下它,就在窗口随机的位置产生的一个随机颜色的方块,停留3秒后消失,每个方块均由一个线程产生。
我已经写的代码:
import java.awt.*;
import java.awt.event.*;

public class Caidan {

public static void main(String[] args) {
new CaiWindow();

}

}

class CaiCanvas extends Canvas {
Color c;

CaiCanvas(Color c) {
this.c = c;
}

public void paint(Graphics g) {
g.setColor(c);
int p, q;
p = (int) (Math.random() * 460);
q = (int) (Math.random() * 400);
g.fillRect(p, q, 30, 30);

}
}

class CaiWindow extends Frame implements Runnable, ActionListener {
Panel a, b;

Button btn;
Thread thread;

CaiWindow() {
thread = new Thread(this);
a = new Panel();
b = new Panel();

btn = new Button("click");
btn.addActionListener(this);

a.add(btn);
add(a, Bord

思路:用一个list来保存各个方块的位置。每次添加一个方块的时候,在一个单独的线程里等待3秒钟,然后把该方块从list里删除,在等待开始的时候和结束的时候重绘面板。

//ColorSquare.java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ColorSquare {
public static void main(String[] args) {
new MyFrame();
}
}

class MyFrame extends JFrame {
private JButton btn;
private SquarePanel panel;

MyFrame() {
setSize(500,500);
btn = new JButton("click");
add(btn, BorderLayout.NORTH);
panel = new SquarePanel();
add(panel, Borde