/*
  一个风扇控制的java程序,一共有三个风扇,可以单独控制,也可以同时控制
*/import java.util.*;
import java.awt.*;
import java.awt.Graphics.*;
import javax.swing.*;
import javax.swing.JPanel.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.lang.*;public class FanMoving
{
public static void main(String[] args)
{
MyFrame frame=new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}//JFrame类
class MyFrame extends JFrame
{ private static int W=400;
private static int H=400;
private FanPanel [] panel=new FanPanel [3];
private JPanel panel4=new JPanel(); private Thread [] thread=new Thread [3];
private JButton [] button=new JButton [4];
private int [] Status=new int [3];
;
private Thread.State state;
    //给每个面板布局
    public MyFrame()
{
setTitle(" FanMoving ");
setSize(W,H);
//四个按钮Button
button[0]=new JButton("Start");
button[1]=new JButton("Stop");
        button[2]=new JButton("Start All");
button[3]=new JButton("Stop All"); for(int i=0;i<3;i++)
{
Status[i]=0;//风扇的起始状态是关 panel[i].add(button[0]);
panel[i].add(button[1]);
button[0].addActionListener(new ButtonAction(0));
button[1].addActionListener(new ButtonAction(1));
} panel4.add(button[2]);
panel4.add(button[3]);
button[2].addActionListener(new ButtonAction(2));
button[3].addActionListener(new ButtonAction(3));        //面板的布局(这个有点麻烦),想清楚怎么回事
add(panel[0],BorderLayout.WEST);
add(panel[1],BorderLayout.CENTER);
add(panel[2],BorderLayout.EAST);
        add(panel4,BorderLayout.SOUTH); for(int i=0;i<3;i++)
{
FanPanel r=new FanPanel();
thread[i]=new Thread(r);
thread[i].start();
//thread[i].yield();
}
    }
//事件监听器
private class ButtonAction implements ActionListener
{
private int n=0;//
public ButtonAction(int n)
{
this.n=n;
}
public void actionPerformed(ActionEvent e)
{
//Size threadRunState=Size.RUNNABLE; try
{
if(n==3)
{
for(int i=0;i<3;i++)
{
if(thread[i].getState()!=state.RUNNABLE)        thread[i].start();
    }
} else if(n==2)
{
for(int i=0;i<3;i++)
{
if(thread[i].getState()==state.RUNNABLE)        thread[i].yield();
    }
    }     else if(n==1)
    {
if(thread[this.n].getState()==state.RUNNABLE)        thread[this.n].yield();
}                else if(n==1)
    {
if(thread[this.n].getState()!=state.RUNNABLE)        thread[this.n].start();
} }
catch(Exception ex)
{
System.out.println(ex);
} }
}
}/ Panel类
class FanPanel extends JPanel implements Runnable
{
  private int radius=40;
  private int rangeAngle=30;
  private int [] Start=new int [3];
  private int speed=25;
  private int number=100000000;   private int x,y;      public FanPanel()
      {
  for(int i=0;i<3;i++)
  {
        Start[i]=i*30;//风 扇 起 始 角 度
      }
  }   //绘图
   public void paintComponent(Graphics g)
   {
   super.paintComponent(g);
   Graphics2D g2=(Graphics2D)g;
   setBackground(Color.white);
   PaintFan(g2);    }       //绘制风扇形状
   public synchronized void PaintFan(Graphics2D g2)
   {
   x=50;y=50;
   for(int i=0;i<3;i++)
   {
   int startAngle=Start[i];
   g2.clearRect(x,y,2*radius,2*radius);
   g2.setColor(Color.green);
   g2.fillArc(x,y,2*radius,2*radius,startAngle,rangeAngle);
   g2.fillArc(x,y,2*radius,2*radius,startAngle+120,rangeAngle);
   g2.fillArc(x,y,2*radius,2*radius,startAngle+240,rangeAngle);
   x+=100;
   }
   } // 重写Thread中的run()方法
public void run()
{
try
{
for(int i=0;i<number;i++)
{
int cur=0;
for(int j=0;j<3;j++)
/*if(Thread.currentThread()==thread[j])
{
cur=j;
break;
}*/
Start[cur]+=30;//
repaint();
if(Start[cur]>=360)
Start[cur]-=360;
Thread.sleep(speed); }
}
catch(Exception e)
{
System.out.println(e);
}
}
}
要达到的效果   在现等