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小时内删除。
发表评论