天天看點

java風扇(三個風扇-可開始、暫停、重置、加速、減速)

代碼内含有詳細的注釋,請讀者自行觀看,淺顯易懂

是以我就不解釋了,直接上代碼

package homework;  
//自行建立package

import java.awt.event.*;  

import javax.swing.*;  

import java.awt.*;  
import java.util.concurrent.locks.Lock;  
import java.util.concurrent.locks.ReentrantLock;  

//author=HuangLin(BUPT)
public class Three_Fan extends Frame implements ActionListener{  
    MyPanel clockPanel; 
    //the fan is on or off
    boolean flag1 = false;  
    boolean flag2 = false;  
    boolean flag3 = false;
    int sign = ;//延時的設計,使得三個風扇和一個風扇的轉速保持一緻  
    //the angle of each fan(start)
    int [] angle1 = {,,};  
    int [] angle2 = {-, -, -};  
    int [] angle3 = {-, -, -};  
    int [] angle4 = {, ,}; 
    //the speed of each fan.speed>0 or <0 represent direction
    int [] speed = {,,};
    final Lock l = new ReentrantLock();  
    Button start1 = new Button("Start");  
    Button stop1 = new Button("Stop");  
    Button reset1 = new Button("Reset"); 
    Button up_speed1 = new Button("UpSpeed");
    Button down_speed1 = new Button("DownS");

    Button start2 = new Button("Start");  
    Button stop2 = new Button("Stop");  
    Button reset2 = new Button("Reset"); 
    Button up_speed2 = new Button("UpSpped");
    Button down_speed2 = new Button("DownS");

    Button start3 = new Button("start");  
    Button stop3 = new Button("Stop");  
    Button reset3 = new Button("Reset"); 
    Button up_speed3 = new Button("UpSpeed");
    Button down_speed3 = new Button("DownS");

    Button start_all = new Button("Start_All");  
    Button stop_all = new Button("Stop_All");  
    Button ready_go = new Button("Ready_Go");  

    //建立三個程序          
    Run A = new Run();  
    Run B = new Run();  
    Run C = new Run();  

    Three_Fan()  
    {  

        //draw panel
        clockPanel = new MyPanel();  
        clockPanel.setLayout(null);  
        start1.setBounds(, , , );  
        stop1.setBounds(, , , );  
        reset1.setBounds(, , , );
        up_speed1.setBounds(, , , );
        down_speed1.setBounds(, , , );

        start2.setBounds(, , , );  
        stop2.setBounds(, , , );  
        reset2.setBounds(, , , );
        up_speed2.setBounds(, , , );
        down_speed2.setBounds(, , , );

        start3.setBounds(, , , );  
        stop3.setBounds(, , , );  
        reset3.setBounds(, , , );
        up_speed3.setBounds(, , , );
        down_speed3.setBounds(, , , );

        start_all.setBounds(, , , );  
        stop_all.setBounds(, , , );  
        ready_go.setBounds(, , , );  


        //action listener   
        start1.addActionListener(this);  
        stop1.addActionListener(this);  
        reset1.addActionListener(this); 
        up_speed1.addActionListener(this);
        down_speed1.addActionListener(this);

        start2.addActionListener(this);  
        stop2.addActionListener(this);  
        reset2.addActionListener(this);
        up_speed2.addActionListener(this);
        down_speed2.addActionListener(this);

        start3.addActionListener(this);  
        stop3.addActionListener(this);  
        reset3.addActionListener(this);  
        up_speed3.addActionListener(this);
        down_speed3.addActionListener(this);

        start_all.addActionListener(this);  
        stop_all.addActionListener(this);  
        ready_go.addActionListener(this);  


        //add
        add(start1);  
        add(stop1);  
        add(reset1);
        add(up_speed1);
        add(down_speed1);

        add(start2);  
        add(stop2);  
        add(reset2);
        add(up_speed2);
        add(down_speed2);

        add(start3);  
        add(stop3);  
        add(reset3); 
        add(up_speed3);
        add(down_speed3);

        add(start_all);  
        add(stop_all);  
        add(ready_go);  

        add(clockPanel);  
    }  

    //action listener function
    public void actionPerformed(ActionEvent e) {  
        if(e.getSource() == ready_go)  
        {  
            A.start();  
            B.start();  
            C.start();  
        }  
        else if(e.getSource() == start1)  
        {  
            flag1 = true;  
        }  
        else if(e.getSource() == stop1)  
        {  
            flag1 = false;  
        }  
        else if(e.getSource() == reset1)  
        {  
            angle1[] = ;  
            angle2[] = -;  
            angle3[] = -;  
            angle4[] = ;  
        } 
        else if(e.getSource()==up_speed1){
            speed[]+=;
        }
        else if(e.getSource()==down_speed1){
            speed[]-=;
        }


        else if(e.getSource() == start2)  
        {  
            flag2 = true;  
        }  
        else if(e.getSource() == stop2)  
        {  
            flag2 = false;  
        }  
        else if(e.getSource() == reset2)  
        {  
            angle1[] = ;  
            angle2[] = -;  
            angle3[] = -;  
            angle4[] = ;  
        } 
        else if(e.getSource()==up_speed2){
            speed[]+=;
        }
        else if(e.getSource()==down_speed2){
            speed[]-=;
        }


        else if(e.getSource() == start3)  
        {  
            flag3 = true;  
        }  
        else if(e.getSource() == stop3)  
        {  
            flag3 = false;  
        }  
        else if(e.getSource() == reset3)  
        {  
            angle1[] = ;  
            angle2[] = -;  
            angle3[] = -;  
            angle4[] = ;  

        }
        else if(e.getSource()==up_speed3){
            speed[]+=;
        }
        else if(e.getSource()==down_speed3){
            speed[]-=;
        }


        else if(e.getSource() == start_all)  
        {  
            flag1 = true;  
            flag2 = true;  
            flag3 = true;  
        }  
        else if(e.getSource() == stop_all)  
        {  
            flag1 = false;  
            flag2 = false;  
            flag3 = false;  
        }  
    }  

    class MyPanel extends JPanel  
    {  
        public void paint(Graphics g) {  


            //第一個  
            g.setColor(Color.yellow);  
            g.fillArc(, , , , angle1[], -);  
            g.fillArc(, , , , angle2[], -);  
            g.fillArc(, , , , angle3[], -);  
            g.fillArc(, , , , angle4[], -);  


            //第二個            
            g.setColor(Color.red);  
            g.fillArc(, , , , angle1[], -);  
            g.fillArc(, , , , angle2[], -);  
            g.fillArc(, , , , angle3[], -);  
            g.fillArc(, , , , angle4[], -);  

            //第三個   
            g.setColor(Color.green);  
            g.fillArc(, , , , angle1[], -);  
            g.fillArc(, , , , angle2[], -);  
            g.fillArc(, , , , angle3[], -);  
            g.fillArc(, , , , angle4[], -);  
        }  
    }  


    //Main
    public static void main(String[] args)  {  
        Three_Fan window = new Three_Fan();  
        window.addWindowListener(new WindowAdapter()  //為了關閉視窗  
          {  
           public void windowClosing(WindowEvent e)  
           {  
               System.exit();  
           }  
          });  
        window.setBounds(, , , );  
        window.setTitle("My_Fan(2013211842-黃麟)");
        window.setVisible(true);  
        window.setLayout(null);  
        window.setResizable(false);  
    }  

    //paint repaint 
    void lfl(int state)  
    {    
        angle1[state] += speed[state];  
        angle2[state] += speed[state];  
        angle3[state] += speed[state];  
        angle4[state] += speed[state];  
        try  
        {  
            Thread.sleep(/sign);  
        }catch(Exception e)  
        {     
            e.printStackTrace();  
        }  
        repaint();  
    }  


    //Thread
    private class Run extends Thread  
    {  
        public void run()   
        {  
            while (true) {  
                l.lock();  

                if(flag1 == false && flag2 == false && flag3 == false)  
                {   
                    sign = ;
                    continue
                    ;  
                } 
                else if(flag1 == false && flag2 == false && flag3 == true)  
                {  
                    sign = ;
                    lfl();
                } 
                else if(flag1 == false && flag2 == true && flag3 == false)  
                {  
                    sign = ;
                    lfl();
                } 
                else if(flag1 == false && flag2 == true && flag3 == true)  
                {  
                    sign = ;
                    lfl();
                    lfl();
                } 
                else if(flag1 == true && flag2 == false && flag3 == false)  
                {  
                    sign = ;
                    lfl();
                } 
                else if(flag1 == true && flag2 == false && flag3 == true)  
                {  
                    sign = ;
                    lfl();
                    lfl();
                } 
                else if(flag1 == true && flag2 == true && flag3 == false)  
                {  
                    sign = ;
                    lfl();
                    lfl();
                } 
                else if(flag1 == true && flag2 == true && flag3 == true)  
                {  
                    sign = ;
                    lfl();
                    lfl();
                    lfl();
                } 


                l.unlock();  
            }  
        }  
    }  
}