import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cooking extends JFrame implements ActionListener,Runnable{
    JLabel l1,l2;
    JTextField tf;
    JPanel p1,p2;
    JButton[] b = new JButton[12];
    String[] s = {"7","8","9","4","5","6","1","2","3","清零","0","开始"};
    int[] num = new  int[4];
    Thread t;//声明一个线程
    public Cooking(){
        init();
        this.setTitle ("微波炉模拟控制器");
        this.pack();
        this.setLocationRelativeTo (null);
        this.setVisible(true);
        this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    }
    public void init(){
        l1 = new JLabel("烹  调");
        l2 = new JLabel("指示灯");
        tf = new JTextField(4);
        l2.setFont (new Font(Font.SERIF,Font.BOLD,15));
        tf.setFont (new Font(Font.SERIF,Font.BOLD,18));
        tf.setBackground (Color.GREEN);
        tf.setEditable (false);
        tf.setHorizontalAlignment (SwingConstants.CENTER);
        tf.setBorder (ateLoweredBevelBorder ());
        p1 = new JPanel(new FlowLayout(FlowLayout.CENTER,20,5));
        p2 = new JPanel(new GridLayout(4,3,5,5));
        p1.add(l1);
        p1.add(tf);
        p1.add(l2);
        for(int i=0;i<12;i++){
            b[i] = new JButton(s[i]);
            p2.add(b[i]);
            b[i].addActionListener (this);有趣的java小程序
        }
        b[9].setForeground (Color.BLUE);//设置前景
        b[11].setForeground (Color.RED);
        setColor(Color.GRAY);//方法调用 设置颜
        setNum();//方法调用 设置定时器
        p2.setBorder (ateEtchedBorder ()); 
        add(p1,BorderLayout.NORTH);
        add(p2,BorderLayout.CENTER);
    } /*
    *实现接口接口Runnable的方法
    */
    public void run(){
        for(int i=0;i<4;i++){
            //因为初始化是-1,当用户没有全部重置计时器的四个数时,将-1设为0
            if(num[i]==-1)num[i] = 0;
        }
        while(true){
            try{
                Thread.sleep (1000);//休眠一秒
            }catch(InterruptedException ie){
                ie.printStackTrace ();
            } 
            if(num[3]!=0){//秒钟第二个数不为"0"
                num[3]--;
            }else{  //为"0"
                num[3] = 9;    //重置为"9"
                if(num[2]!=0){//秒钟第一个数不为"0"
                    num[2]--;     
                }else{  //为"0"
                    num[2] = 5;    //重置为"5"
                    if(num[1]!=0){//分钟第二个数不为"0"
                        num[1]--;
                    }else{  //为"0"
                        num[1] = 9;    //重置为"9"     
                        if(num[0]!=0){//分钟第一个数不为"0"
                            num[0]--;
                        }else{  //都为"0"时,烹调结束
                            setColor(Color.GRAY);
                            setEnabled(true);
                            b[11].setText ("开始");
                            setNum(); 
                            break;
                        }
                    }
                }     
            }
            String time = num[0]+""+num[1]+":"+num[2]+""+num[3];
            tf.setText (time); //刷新定时器
            System.out.println("surplus time is: "+time);
        } 
    }
    /*
    *设置组件的使用状态
    *true:可以使用
    *false:禁止使用
    */
    public void setEnabled(boolean bool){
        for(int i=0;i<11;i++){
            b[i].setEnabled (bool);
        }
    }
    /*
    *设置定时器和计时器
    */ 
    public void setNum(){
        tf.setText("00:00");
        for(int i=0;i<4;i++){
            num[i] = -1;
        }
    }
    /*
    *设置组件的“指示灯”标签的边框及前景
    */ 
    public void setColor(Color c){ 
        l2.setBorder (ateLineBorder (c));
        l2.setForeground (c);
    }
    /*
    *事件处理
    */
    public void actionPerformed(ActionEvent ae){ 
        //当用户点击“开始”按钮时
        ActionCommand ().equals ("开始")){
            //当所预定的时间不为“0”时才可响应“开始”按钮事件
            if(!tf.getText ().equals ("00:00")){   
                t = new Thread(this);//创建一个线程类对象
                t.start ();//启动线程 烹调开始   
                setColor(Color.YELLOW);//烹调开始 设置指示灯颜为“YELLOW”黄
                setEnabled(false);//禁用按钮功能
                b[11].setText ("停止"); //设置按钮文本 为"停止"
            }
        }//当用户点击“停止”按钮时
        else ActionCommand ().equals ("停止")){ 
            t.stop ();//终止线程  烹调结束     
            setEnabled(true);//启用按钮功能
            setColor(Color.GRAY);//烹调结束 设置指示灯颜为“GRAY”灰
            setNum();//计时清零
            b[11].setText ("开始");   
        }//当用户点击“清零”按钮”时
        else ActionCommand ().equals ("清零")){
            setNum();
        }//当用户点击数字按钮时
        else{
            String s = ae.getActionCommand ();//相当于按钮上的文本内容
            int i = Integer.parseInt (s);//类型转换:String--int
            //num[0]~num[3]分别是分钟第一,二个数和秒钟第一,二个数
            if(num[0]==-1){//==1 表示还没有设置分钟第一个数
                if(i<6){//分钟不能超过59,所以第一个数字不能大于6
                    tf.setText(i+"0:00");//比如"30:00"
                    num[0] = i;//存储分钟第一个数"3"
                }     
            }else if(num[1]==-1){//同上
                // 分钟第二个数从0~9没限制
                tf.setText(num[0]+""+i+":00");
                num[1] = i;
            }else if(num[2]==-1){//...
                if(i<6){
                    tf.setText(num[0]+""+num[1]+":"+i+"0");
                    num[2] = i;
                }
            }else if(num[3]==-1){
                tf.setText(num[0]+""+num[1]+":"+num[2]+""+i);
                num[3] = i;
            }   
        }
    }
    public static void main(String[] args){
        new Cooking();
    }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。