📄 ovenframe.java
字号:
package myoven.application;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import myoven.button.*;
import myoven.beeper.*;
import myoven.door.*;
import myoven.light.*;
import myoven.powertube.*;
import myoven.timer.*;
import myoven.observer.*;
import com.borland.jbcl.layout.XYLayout;
import javax.swing.border.*;
public class OvenFrame extends JFrame {
//微波炉元素定义
BaseButton cookButton=new BaseButton();//烹饪按钮
// StatefulButton cookButton=new StatefulButton();
BaseButton cancelButton=new BaseButton();//取消按钮
myoven.timer.Timer timer=myoven.timer.Timer.getInstance();//计时器
PowerTube powertube=PowerTube.getInstance();//功率管
Light light=Light.getInstance();//灯
Beeper beeper=Beeper.getInstance();//鸣叫器
Door door=new Door();//炉门
//观察者定义
Beeper_ButtonObserver beepBtnObs=new Beeper_ButtonObserver();
Beeper_TimerExpiredObserver beepTimExpObs=new Beeper_TimerExpiredObserver();
Light_TimerOnObserver lgtTimOnObs=new Light_TimerOnObserver();
Light_DoorOpenObserver lgtDoorOpenObs=new Light_DoorOpenObserver();
Light_DoorCloseObserver lgtDoorCloseObs=new Light_DoorCloseObserver();
Light_TimerExpiredObserver lgtTimExpObs=new Light_TimerExpiredObserver();
Light_TimerOffObserver lgtTimOffObs=new Light_TimerOffObserver();
Light_CancelButtonObserver lgtCanlBtnObs=new Light_CancelButtonObserver();
PowerTube_DoorOpenObserver pwtDoorOpenObs=new PowerTube_DoorOpenObserver();
PowerTube_TimeOffObserver pwtTimOffObs=new PowerTube_TimeOffObserver();
PowerTube_TimerOnObserver pwtTimOnObs=new PowerTube_TimerOnObserver();
PowerTube_TimeExpiredObserver pwtTimExpObs=new PowerTube_TimeExpiredObserver();
Timer_CancelButtonObserver timCanlBtnObs=new Timer_CancelButtonObserver();
Timer_CookButtonObserver timCookBtnObs=new Timer_CookButtonObserver();
Timer_DoorOpenObserver timDoorOpenObs=new Timer_DoorOpenObserver();
Timer_DoorCloseObserver timDoorCloseObs=new Timer_DoorCloseObserver();
final int TIMEINTERVAL=100;//计时单位
//界面定义
ImageIcon icon_light_on=new ImageIcon("images/light_on.gif");
ImageIcon icon_light_off=new ImageIcon("images/light_off.gif");
ImageIcon icon_door_open=new ImageIcon("images/door_open.gif");
ImageIcon icon_door_close=new ImageIcon("images/door_close.gif");
ImageIcon icon_powerTube_off=new ImageIcon("images/powerTube_off.gif");
ImageIcon icon_powerTube_on=new ImageIcon("images/powerTube_on.gif");
ImageIcon icon_null=new ImageIcon();
ImageIcon icon_oven=new ImageIcon("images/oven.jpg");
ImageIcon icon_duck=new ImageIcon("images/duck2.jpg");
JPanel contentPane;
JButton jButton_cookButton = new JButton();
JButton jButton_cancelButton = new JButton();
JRadioButton jRadioButton_DoorSwitch = new JRadioButton();
JLabel jLabel_light = new JLabel();
JLabel jLabel_door = new JLabel();
JLabel jLabel_powerTube = new JLabel();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
XYLayout xYLayout1 = new XYLayout();
TitledBorder titledBorder1;
JLabel jLabel3 = new JLabel();
JTextField jTextField_timeRemain = new JTextField();
JLabel jLabel4 = new JLabel();
//Construct the frame
public OvenFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
/*------------------我的微波炉初始化开始---------------------*/
titledBorder1 = new TitledBorder("");
cookButton.subscribe(timCookBtnObs);//计时器预定烹饪按钮单击事件
cookButton.subscribe(beepBtnObs);//鸣叫器预定烹饪按钮单击事件
cancelButton.subscribe(timCanlBtnObs);//计时器预定取消按钮单击事件
cancelButton.subscribe(beepBtnObs);//鸣叫器预定取消按钮单击事件
cancelButton.subscribe(lgtCanlBtnObs);//指示灯预定取消按钮单击事件
timer.subscribeTimerExpired(beepTimExpObs);//鸣叫器预定计时器超时事件
timer.subscribeTimerOn(lgtTimOnObs);//灯预定计时器开始计时事件
timer.subscribeTimerExpired(lgtTimExpObs);//灯预定计时器超时事件
timer.subscribeTimerOff(pwtTimOffObs);//功率管预定计时器结束计时事件
timer.subscribeTimerOn(pwtTimOnObs);//功率管预定计时器开始计时事件
timer.subscribeTimerExpired(pwtTimExpObs);//功率管预定计时器计时超时事件
door.subscribeDoorOpen(pwtDoorOpenObs);//功率管预定开门事件
door.subscribeDoorOpen(timDoorOpenObs);//计时器预定开门事件
door.subscribeDoorClose(timDoorCloseObs);//计时器预定关门事件
door.subscribeDoorClose(lgtDoorCloseObs);//灯预定关门事件
door.subscribeDoorOpen(lgtDoorOpenObs);//灯预定开门事件
contentPane = (JPanel) this.getContentPane();
jButton_cookButton.addActionListener(new OvenFrame_jButton_cookButton_actionAdapter(this));
contentPane.setLayout(xYLayout1);
this.setEnabled(true);
this.setForeground(Color.cyan);
this.setResizable(false);
this.setSize(new Dimension(396, 279));
this.setTitle("我的微波炉");
jButton_cancelButton.setBackground(Color.orange);
jButton_cancelButton.setText("取消");
jButton_cancelButton.addActionListener(new OvenFrame_jButton_cancelButton_actionAdapter(this));
jRadioButton_DoorSwitch.setBackground(Color.orange);
jRadioButton_DoorSwitch.setPreferredSize(new Dimension(69, 25));
jRadioButton_DoorSwitch.setBorderPainted(true);
jRadioButton_DoorSwitch.setRolloverIcon(null);
jRadioButton_DoorSwitch.setText("开门");
jRadioButton_DoorSwitch.addActionListener(new OvenFrame_jRadioButton_DoorSwitch_actionAdapter(this));
jButton_cookButton.setBackground(Color.orange);
jButton_cookButton.setIcon(null);
jButton_cookButton.setText("烹饪");
jLabel_light.setDisabledIcon(null);
jLabel_light.setIcon(icon_light_off);
jLabel_door.setIcon(icon_door_close);
jLabel_door.setText("");
jLabel_powerTube.setIcon(icon_powerTube_off);
jLabel_powerTube.setText("");
jLabel1.setText("炉门:");
jLabel2.setText("功率管:");
contentPane.setBackground(new Color(59, 190, 85));
contentPane.setEnabled(true);
contentPane.setForeground(Color.gray);
contentPane.setBorder(BorderFactory.createRaisedBevelBorder());
contentPane.setDebugGraphicsOptions(0);
contentPane.setDoubleBuffered(true);
contentPane.setOpaque(true);
jLabel3.setIcon(icon_duck);
jLabel3.setText("");
jTextField_timeRemain.setEditable(false);
jTextField_timeRemain.setSelectedTextColor(Color.white);
jTextField_timeRemain.setText("");
jTextField_timeRemain.setHorizontalAlignment(SwingConstants.CENTER);
jLabel4.setText("剩余时间:");
contentPane.add(jButton_cookButton, new XYConstraints(317, 67, -1, -1));
contentPane.add(jRadioButton_DoorSwitch, new XYConstraints(319, 159, 56, -1));
contentPane.add(jLabel2, new XYConstraints(11, 23, -1, -1));
contentPane.add(jLabel_powerTube, new XYConstraints(59, 18, 25, -1));
contentPane.add(jLabel3, new XYConstraints(52, 66, 228, 135));
contentPane.add(jLabel1, new XYConstraints(133, 21, -1, -1));
contentPane.add(jLabel_door, new XYConstraints(178, 18, -1, -1));
contentPane.add(jTextField_timeRemain, new XYConstraints(114, 219, 58, -1));
contentPane.add(jLabel4, new XYConstraints(59, 221, 52, 15));
contentPane.add(jLabel_light, new XYConstraints(242, 13, -1, -1));
contentPane.add(jButton_cancelButton, new XYConstraints(318, 113, -1, -1));
}
public void workingState(){ //监听微波炉工作状态,以便界面显示
while(true){
if(door.getIsOpen()){//门处于打开状态
jLabel_door.setIcon(icon_door_open);//显示开启的门
}else{//门闭合
jLabel_door.setIcon(icon_door_close);//显示关闭的门
}
if(light.getIsOn()){//灯开了
jLabel_light.setIcon(icon_light_on);//显示开了的灯
}else{//灯关了
jLabel_light.setIcon(icon_light_off);//显示关了的灯
}
if(powertube.getIsOn()){//功率管开了
jTextField_timeRemain.setText(Integer.toString(timer.getTime_remaining()));//显示烹饪时候剩余时间
jLabel_powerTube.setIcon(icon_powerTube_on);//显示功率管处于工作状态的图标
}else{//功率管关了
jTextField_timeRemain.setText("0");//显示烹饪剩余时间=0,即烹饪结束
jLabel_powerTube.setIcon(icon_powerTube_off);//显示功率管处于非工作状态的图标
}
try{
Thread.sleep(TIMEINTERVAL);//每个时间TIMEINTERVAL 监听一次微波炉个组成元素的状态
}catch(InterruptedException e){}
}
}
/*
JProgressBar jProgressBar1 = new JProgressBar(0,60);
public void Progress(){//进度条,未实现
num=0;
int totalTime=-1;
while(true){
if((timer.getIsOn()&&timer.getTime_remaining()==0)){//剩余时间==0并且isOn,说明烹饪结束
return;
}
if(totalTime==-1&&timer.getTime_remaining()!=0){
totalTime=timer.getTime_remaining();
}
System.out.println("进度条位置:"+((totalTime-timer.getTime_remaining())==-1?0:totalTime-timer.getTime_remaining()));
jProgressBar1.setValue((totalTime-timer.getTime_remaining())==-1?0:totalTime-timer.getTime_remaining());
try{
Thread.sleep(1000);//TIMEINTERVAL);
}catch(InterruptedException e){}
// num+=95;
}
}
JProgressBar current = new JProgressBar(0,2000);
//JProgressBar current = new JProgressBar();
public void iterate(){
num=0;
while(num<2000){
System.out.println("current:"+num);
current.setValue(num);
try{
Thread.sleep(1000);
}
catch(InterruptedException e){}
num+=95;
}
}
*/
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
void jButton_cookButton_actionPerformed(ActionEvent e) {//烹饪按钮
cookButton.pressed();//给烹饪按钮发消息
}
void jButton_cancelButton_actionPerformed(ActionEvent e) {//取消按钮
cancelButton.pressed();//给取消按钮发消息
}
void jRadioButton_DoorSwitch_actionPerformed(ActionEvent e) {
System.out.println(jRadioButton_DoorSwitch.isSelected());
if(jRadioButton_DoorSwitch.isSelected()){
jRadioButton_DoorSwitch.setText("关门");
door.open();//打开门(radio处于选中状态)isOpen=true;
}
else{
jRadioButton_DoorSwitch.setText("开门");
door.close();//关闭门(radio非选中状态) isOpen=false;
}
}
}
class OvenFrame_jButton_cookButton_actionAdapter implements java.awt.event.ActionListener {
OvenFrame adaptee;
OvenFrame_jButton_cookButton_actionAdapter(OvenFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton_cookButton_actionPerformed(e);
}
}
class OvenFrame_jButton_cancelButton_actionAdapter implements java.awt.event.ActionListener {
OvenFrame adaptee;
OvenFrame_jButton_cancelButton_actionAdapter(OvenFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton_cancelButton_actionPerformed(e);
}
}
class OvenFrame_jRadioButton_DoorSwitch_actionAdapter implements java.awt.event.ActionListener {
OvenFrame adaptee;
OvenFrame_jRadioButton_DoorSwitch_actionAdapter(OvenFrame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jRadioButton_DoorSwitch_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -