01:import java.awt.*;
02:import java.awt.event.*;
03:import javax.swing.* ;
04:
05:class Twinkle4 extends JPanel implements Runnable {
06: Color bc = new Color(0, 0, 128); // 背景色 : Navy Blue
07: Color pc = new Color(181, 166, 66); // 図形の色 : Brass
08: Color dc = bc; // 表示色
09: boolean stop = false; // 表示停止フラグ
10:
11: public Twinkle4() {
12: setBackground(bc); // 背景色を指定
13: setLayout(new BorderLayout()); // center と south を使用
14: final JColorChooser chooser = new JColorChooser(); // 表示色の選択用
15: final JButton button = new JButton("color"); // 表示色選択ボタン
16: button.addActionListener(new ActionListener() {
17: public void actionPerformed(ActionEvent e) {
18: Color c = chooser.showDialog(null, "draw color", pc);
19: if(c!=null) pc = c; // 色が指定されたら変更
20: }
21: });
22: final JButton sbutton = new JButton("stop"); // 表示停止ボタン
23: sbutton.addActionListener(new ActionListener() {
24: public void actionPerformed(ActionEvent e) {
25: if(stop) {
26: stop = false; //
27: sbutton.setText("stop"); //
28: } else {
29: stop = true; //
30: sbutton.setText("go"); //
31: }
32: }
33: });
34: JPanel pan = new JPanel();
35: pan.add(button); // 色選択ボタンの貼り付け
36: pan.add(sbutton); // 表示停止ボタンの貼り付け
37: add(pan, BorderLayout.SOUTH); // 2つのボタンを貼り付け
38: Thread thread = new Thread(this); // スレッドの生成
39: thread.start(); // スレッドの起動
40: }
41:
42: public void paintComponent(Graphics g) {
43: super.paintComponent(g);
44: int w = getWidth();
45: int h = getHeight();
46: int r = (w+h)/8;
47: int x = w/2-r;
48: int y = h/2-r-18;
49: g.setColor(dc); // bc か pc のいずれか
50: g.fillOval(x,y,2*r,2*r); //
51: }
52:
53: public void run() {
54: while(true){
55: try { //
56: Thread.sleep(300); // 0.2 秒停止
57: } //
58: catch(InterruptedException e) { //
59: e.printStackTrace(); //
60: } //
61: if(!stop) {
62: dc = pc; //
63: repaint(); // 表示開始
64: try { //
65: Thread.sleep(1000); // 1 秒間表示
66: } //
67: catch(InterruptedException e) { //
68: e.printStackTrace(); //
69: } //
70: dc = bc; //
71: repaint(); // 表示終了
72: }
73: }
74: }
75:
76: public static void main(String args[]) {
77: JFrame frame = new JFrame("Twinkle"); // 外側のフレーム
78: frame.addWindowListener(new WindowAdapter() {
79: public void windowClosing(WindowEvent e) { System.exit(0); }
80: });
81: Container container = frame.getContentPane(); // コンテントペインの獲得
82: container.setLayout(new GridLayout(0,3,2,2)); // 3列に表示
83: int npanel = 6;
84: if(args.length>0) npanel = Integer.parseInt(args[0]);
85: for(int i=0; i<npanel; i++) {
86: container.add( new Twinkle4() );
87: }
88: frame.setSize(600,500); //
89: frame.setVisible(true); // フレームの表示
90: }
91:}