?? 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 + -