JAVA小程序開發之模擬電梯APP(代碼優化)

今年1月,自己獨立弄了個模擬電梯APP,由於當時寫的時間倉促,一些代碼命名、註釋和行間距,沒有好好控制,除了自己別人很難看得懂。 

下午難得有時間,於是把這些缺陷統統優化了一遍,這也是在告訴自己,以後寫代碼時,一定得規範,讓別人能容易看得懂,總之,勉勵自己寫出高質量的代碼!

package com.sinolife.icms.grp.test;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;  

/**
 * Init add on 20140105
 * @author Mars
 * 
 * Modified by Mars on 20140309, target: Code and Conments Enhancement
 *
 */
public class SimulatedElevator {
	
	public static void main(String[] args){
	
		seFrame seFrame = new seFrame();
		seFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		seFrame.setVisible(true); 
	}
}

class RunElevator implements Runnable{
	
	private Elevator elevator;
	private Component component;
	
	public RunElevator(Elevator elevator,Component component){
		
		this.elevator = elevator;
		this.component = component;
	}
 
	public void run(){
		
		while (true){
		
			try {
			
				elevator.move();
				component.repaint();
				
				if(elevator.currentFloor == 1){
					elevator.isAllowRunInSide = true;
				}
				
				Iterator iteratorOut = elevator.arrayClickOutSide.iterator(); 
				int k;
				
				while(iteratorOut.hasNext()){
				
					k = (Integer) iteratorOut.next(); 
					
					if(elevator.currentDistance == k){
						elevator.isRun = false;
					} 
				}
				
				Iterator iteratorIn = elevator.arrayClickInSide.iterator();  
				
				while(iteratorIn.hasNext()){
				
					k = (Integer) iteratorIn.next();  
					
					if(elevator.currentDistance == k){
					
						elevator.isRun = false;
						iteratorIn.remove();
						elevator.isAllowRunInSide = true;
					}
				}
				
				Iterator iteratorRunning = elevator.arrayClickRunning.iterator();  
				
				while(iteratorRunning.hasNext()){
				
					k = (Integer) iteratorRunning.next(); 
					
					if(elevator.currentDistance == k){
						elevator.isRun = false;
						iteratorRunning.remove();
					}
					
				}
				
				// 電梯每0.5秒移動一次
				Thread.sleep(elevator.speed);
			} 
			catch (Exception e){
			
			}
		}
	}
}

class StatusRunnable implements Runnable{ 
	
	private JLabel labFloor;
	private JLabel labStatus;
	private Elevator elevator;
	
	public StatusRunnable(Elevator elevator,JLabel labFloor,JLabel labStatus){
	
		this.labFloor = labFloor;
		this.labStatus = labStatus;
		this.elevator = elevator;
	}
	public void run(){
		
		String status = "";
		
		while(true){
			
			switch(elevator.derection){
			case 2:
				status = "向   上";
				break;
			case 4:
				status = "向   下";
				break;
			default:
				status = "向   上";
				break;
			}
			if(elevator.isRun == false){
				status = "停   止";
			}
			
			labStatus.setText(status);	
			labFloor.setText("" + elevator.currentFloor);
		}
	}
}
 
class Elevator{
	
	protected boolean isRun; 
	protected ArrayList<Node> body; 
	protected Set arrayClickOutSide;
	protected Set arrayClickInSide;
	protected Set arrayClickRunning;
	protected Node food; 
	protected int derection; 
	protected int score;
	protected int status;
	protected int speed;
	protected int distance;
	protected int currentFloor;
	protected int targetFloor;
	protected int interrupDistance;
	protected int currentDistance;
	public static final int SLOW = 500;
	public static final int MID = 300;
	public static final int FAST = 100;
	public static final int RUNNING = 1;
	public static final int PAUSED = 2;
	public static final int GAMEOVER = 3;
	public static final int UP = 2;
	public static final int DOWN = 4;
	public static final int FLOOR_1 = 1;
	public static final int FLOOR_2 = 2;
	public static final int FLOOR_3 = 3;
	public static final int FLOOR_4 = 4;
	public static final int FLOOR_5 = 5;
	public static final int FLOOR_6 = 6;
	boolean isTurnDown;
	boolean isTurnUp;
	boolean isFirstMoving;
	boolean isClick;
	boolean isAllowRunOutSide;
	boolean isAllowRunInSide;
	boolean isInterrupt;
	boolean isClickInside;
	boolean isClickClose;
	protected String moveStatus;
	
	public Elevator(){
		
		speed = Elevator.SLOW;
		score = 0;
		isRun = false;
		status = Elevator.PAUSED;
		derection = Elevator.UP;
		distance = 460;// 初始距離
	    isTurnDown = true;// 是否向下移動
		isTurnUp = true;// 是否向上移動
		isFirstMoving = true;// 首次移動
		isClick = true;
		isAllowRunOutSide =  false;
		isAllowRunInSide =  true;
		isInterrupt = false;
		isClickInside = false;
		isClickClose = false;
		moveStatus = "free";
		targetFloor = 1;
		currentFloor = 1;
		currentDistance = 480;
		interrupDistance = 0;
		arrayClickOutSide = new TreeSet();
		arrayClickInSide = new TreeSet();
		arrayClickRunning = new TreeSet();
		
		// 初始化電梯廂,由四塊組成
		body = new ArrayList<Node>();
		body.add(new Node(0,400));
		body.add(new Node(0,420));
		body.add(new Node(0,440));
		body.add(new Node(0,460)); 
	}
 
	public synchronized void move(){
		
		 // 電梯運行狀態控制
		 if(isRun){ 
		
			Node node = body.get(0);
			int X = node.x;
			int Y = node.y;
			
			// derection == 2向上運行,否則向下運行
			if(derection == 2){
			
				moveStatus = "UP";
				isTurnUp = true;
				if(isFirstMoving){
					
					Y -= Node.H;
				}else{
					if(isTurnDown){
					
						body.clear();
						body.add(new Node(0,Y-60));
						body.add(new Node(0,Y-40));
						body.add(new Node(0,Y-20));
						body.add(new Node(0,Y)); 
						node = body.get(0);
						isTurnDown = false;
					}else{
						
						node = body.get(0);
					}
					
					Y = node.y;
					System.out.println(Y+"  Y===.");
					Y -= Node.H;
				}
				
			}else{
				
				moveStatus = "DOWN";
				isFirstMoving = false;
				isTurnDown = true;
				
				if(isTurnUp){
				
					body.clear();
					body.add(new Node(0,Y+60));
					body.add(new Node(0,Y+40));
					body.add(new Node(0,Y+20));
					body.add(new Node(0,Y)); 
					node = body.get(0);
					isTurnUp = false;
				}else{
					
					node = body.get(0);
				}
				
				Y = node.y;
				Y += Node.H;
			}
			
			// 根據運行距離,顯示牌顯示當前電梯所在樓層數
			switch(Y){
				
				case 480:
					currentFloor = 1;
					break;
				case 380:
					currentFloor = 2;
					break;
				case 360:
					currentFloor = 2;
					break;
				case 340:
					currentFloor = 2;
					break;
				case 320:
					currentFloor = 2;
					break;
				case 300:
					currentFloor = 3;
					break;
				case 280:
					currentFloor = 3;
					break;
				case 260:
					currentFloor = 3;
					break;
				case 240:
					currentFloor = 3;
					break;
				case 220:
					currentFloor = 4;
					break;
				case 200:
					currentFloor = 4;
					break;
				case 180:
					currentFloor = 4;
					break;
				case 160:
					currentFloor = 4;
					break;
				case 140:
					currentFloor = 5;
					break;
				case 120:
					currentFloor = 5;
					break;
				case 100:
					currentFloor = 5;
					break;
				case 80:
					currentFloor = 5;
					break;
				case 60:
					currentFloor = 6;
					break;
				case 40:
					currentFloor = 6;
					break;
				case 20:
					currentFloor = 6;
					break;
				case 0:
					currentFloor = 6;
					break;
			}
			
			System.out.println("電梯目前所在樓層,第  "+currentFloor+" 層");
			currentDistance = Y;
			body.add(0,new Node(X,Y));
			body.remove(body.size() - 1);
			
			//判斷電梯運行軌跡與控制值相同,否則電梯停止運行
			if(Y == distance){
				
				isClick = true;
				isRun = false;
				currentFloor = targetFloor;
				isAllowRunOutSide = false; 
				arrayClickOutSide.clear();
				arrayClickInSide.clear();
			}
		 }
	}
}

class Node{
	
	protected static final int W = 80;
	protected static final int H = 20;
	int x;
	int y;
	
	public Node(int x,int y){
		
		this.x = x;
		this.y = y;
	}
} 

class ElevatorPanel extends JPanel{
	
	Elevator elevator;
	
	public ElevatorPanel(Elevator elevator){
		
		this.elevator = elevator;
	}
	
	public void paintComponent(Graphics g){
		
		super.paintComponent(g);

		/**
		 * 電梯本體
		 * 這裏相當於畫四(elevator.body.size())塊蛇本身,3*20*20
		 */
		Node node = null;
		g.setColor(Color.ORANGE);
	
		for(int i = 0;i < elevator.body.size();i++){
		
			node = elevator.body.get(i);
			g.fillRect(node.x, node.y, node.W, node.H); 
		}
	}
}

class seFrame extends JFrame{

	private JButton btnUp1F;// 一層電梯呼叫按鈕-上
	private JButton btnDown1F;// 一層電梯呼叫按鈕-下
	private JButton btnUp2F;// 二層電梯呼叫按鈕-上
	private JButton btnDown2F;// 二層電梯呼叫按鈕-下
	private JButton btnUp3F;// 三層電梯呼叫按鈕-上
	private JButton btnDown3F;// 三層電梯呼叫按鈕-下
	private JButton btnUp4F;// 四層電梯呼叫按鈕-上
	private JButton btnDonw4F;// 四層電梯呼叫按鈕-下
	private JButton btnUp5F;// 五層電梯呼叫按鈕-上
	private JButton btnDown5F;// 五層電梯呼叫按鈕-下
	private JButton btnUp6F;// 六層電梯呼叫按鈕-上
	private JButton btnDown6F;// 六層電梯呼叫按鈕-下
	private JButton btnNum1;// 電梯內按鈕號碼-1
	private JButton btnNum2;// 電梯內按鈕號碼-2
	private JButton btnNum3;// 電梯內按鈕號碼-3
	private JButton btnNum4;// 電梯內按鈕號碼-4
	private JButton btnNum5;// 電梯內按鈕號碼-5
	private JButton btnNum6;// 電梯內按鈕號碼-6
	private JButton btnClose;// 電梯內關門按鈕-關門
	private JLabel lab1F;// 各樓層數字-1
	private JLabel lab2F;// 各樓層數字-2
	private JLabel lab3F;// 各樓層數字-3
	private JLabel lab4F;// 各樓層數字-4
	private JLabel lab5F;// 各樓層數字-5
	private JLabel lab6F;// 各樓層數字-6
	private JLabel labDisplay;// 顯示牌
	private JLabel labFloor;// 顯示牌-樓層
	private JLabel labStatus;// 顯示牌-狀態(上或下)
	private Elevator elevator;// 電梯
	
	public seFrame(){
		
		// 頁面對象初始化
		init();
		
		// 動作監控,響應方法
		ActionListener seActionListener = new ActionListener(){
			
			public void actionPerformed(ActionEvent e){
				
				Node node = elevator.body.get(0);
				
				if(e.getSource() == btnUp1F){
					
					if(elevator.arrayClickInSide.size() != 0){
						
						elevator.isAllowRunOutSide = true;
					}
			
					if(elevator.isAllowRunOutSide){
						
						// 校驗電梯與觸發事件爲同一層樓
						if(node.y == 400 || node.y == 460){
		
							elevator.isRun = false;
						}else{
							
							elevator.isRun = true;
							elevator.isAllowRunOutSide = false;
							elevator.derection = Elevator.DOWN; 
							elevator.distance = 460;
							elevator.targetFloor = 1;
						}
					}
				}
				
				if(e.getSource() == btnUp2F){
					
					if(elevator.arrayClickInSide.size() != 0){
				
						elevator.arrayClickRunning.clear();
						elevator.arrayClickOutSide.add(320);
					}else{
						
						if(elevator.isAllowRunOutSide){
							
							// 校驗電梯與觸發事件爲同一層樓
							if(node.y == 380 || node.y == 320){
							
								elevator.isRun = false;
							}else{
								
								if(elevator.isClick && elevator.targetFloor > 2){
								
									elevator.derection = Elevator.DOWN;
									elevator.isClick = false;
									elevator.distance = 380;
								}else{
									
									elevator.derection = Elevator.UP; 
									elevator.distance = 320;
								}
						
								elevator.isRun = true;
								elevator.isAllowRunOutSide = false;
								elevator.targetFloor = 2;
							}
						}
						// 電梯外按鈕點擊數累加
						if(elevator.targetFloor >= 2 && elevator.currentFloor <= 2
								&& elevator.distance < 320){
							
							elevator.arrayClickOutSide.add(320);
						}
					}
				}
				if(e.getSource() == btnDown2F){
					
					if(elevator.arrayClickInSide.size() != 0){
						
						elevator.arrayClickRunning.clear();
						elevator.arrayClickOutSide.add(380);
					}else{
						if(elevator.isAllowRunOutSide){
							
							// 校驗電梯與觸發事件爲同一層樓
							if(node.y == 380 || node.y == 320){
						
								elevator.isRun = false;
							}else{
								
								if(elevator.isClick && elevator.targetFloor < 2){
								
									elevator.derection = Elevator.UP;
									elevator.isClick = false;
									elevator.distance = 320;
								}else{
									
									elevator.derection = Elevator.DOWN; 
									elevator.distance = 380;
								}
								
								elevator.isRun = true;
								elevator.isAllowRunOutSide = false;
								elevator.targetFloor = 2;
							}
						}
						// 電梯外按鈕點擊數累加
						if(elevator.targetFloor <= 2 && elevator.currentFloor >= 2
								&& elevator.distance > 380){
					
							elevator.arrayClickOutSide.add(380);
						}
					}
				}
				if(e.getSource() == btnUp3F){
					
					if(elevator.arrayClickInSide.size() != 0){
					
						elevator.arrayClickRunning.clear();
						elevator.arrayClickRunning.add(240);
					}
					if(elevator.isAllowRunOutSide){
						
						// 校驗電梯與觸發事件爲同一層樓
						if(node.y == 300 || node.y == 240){
						
							elevator.isRun = false;
						}else{
							if(elevator.isClick && elevator.targetFloor > 3){
							
								elevator.derection = Elevator.DOWN;
								elevator.isClick = false;
								elevator.distance = 300;
							}else{
								
								elevator.derection = Elevator.UP; 
								elevator.distance = 240;
							}
							
							elevator.isRun = true;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 3;
						}
					}
					// 電梯外按鈕點擊數累加
					if(elevator.targetFloor >= 3 && elevator.currentFloor <= 3
							&& elevator.distance < 240){
						
						elevator.arrayClickOutSide.add(240);
					}
				}
				if(e.getSource() == btnDown3F){
					
					if(elevator.arrayClickInSide.size() != 0){
						
						elevator.arrayClickRunning.clear();
						elevator.arrayClickRunning.add(300);
					}
					if(elevator.isAllowRunOutSide){
						
						//校驗電梯與觸發事件爲同一層樓
						if(node.y == 300 || node.y == 240){
						
							elevator.isRun = false;
						}else{
							if(elevator.isClick && elevator.targetFloor < 3){
							
								elevator.derection = Elevator.UP;
								elevator.isClick = false;
								elevator.distance = 240;
							}else{
								
								elevator.derection = Elevator.DOWN; 
								elevator.distance = 300;
							}
							
							elevator.isRun = true;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 3;
						}
					}
					//電梯外按鈕點擊數累加
					if(elevator.targetFloor <= 3 && elevator.currentFloor >= 3
							&& elevator.distance > 300){
						
						elevator.arrayClickOutSide.add(300);
					}
				}
				if(e.getSource() == btnUp4F){
					
					if(elevator.arrayClickInSide.size() != 0){
					
						elevator.arrayClickRunning.clear();
						elevator.arrayClickRunning.add(160);
					}
					if(elevator.isAllowRunOutSide){
						
						//校驗電梯與觸發事件爲同一層樓
						if(node.y == 160 || node.y == 220){
							elevator.isRun = false;
						}else{
							if(elevator.isClick && elevator.targetFloor > 4){
						
								elevator.derection = Elevator.DOWN;
								elevator.isClick = false;
								elevator.distance = 220;
							}else{
								
								elevator.derection = Elevator.UP; 
								elevator.distance = 160;
							}
							
							elevator.isRun = true;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 4;
						}
					}
					//電梯外按鈕點擊數累加
					if(elevator.targetFloor >= 4 && elevator.currentFloor <= 4
							&& elevator.distance < 160){
						
						elevator.arrayClickOutSide.add(160);
					}
				}
				if(e.getSource() == btnDonw4F){
					
					if(elevator.arrayClickInSide.size() != 0){
						
						elevator.arrayClickRunning.clear();
						elevator.arrayClickRunning.add(220);
					}
					if(elevator.isAllowRunOutSide){
						
						//校驗電梯與觸發事件爲同一層樓
						if(node.y == 160 || node.y == 220){
						
							elevator.isRun = false;
						}else{
							
							if(elevator.isClick && elevator.targetFloor < 4){
							
								elevator.derection = Elevator.UP;
								elevator.isClick = false;
								elevator.distance = 160;
							}else{
								
								elevator.derection = Elevator.DOWN; 
								elevator.distance = 220;
							}
							
							elevator.isRun = true;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 4;
						}
					}
					//電梯外按鈕點擊數累加
					if(elevator.targetFloor <= 4 && elevator.currentFloor >= 4
							&& elevator.distance > 220){
						
						elevator.arrayClickOutSide.add(220);
					}
				}
				if(e.getSource() == btnUp5F){
					
					if(elevator.arrayClickInSide.size() != 0){
						
						elevator.arrayClickRunning.clear();
						elevator.arrayClickOutSide.add(80);
					}
					if(elevator.isAllowRunOutSide){
						
						//校驗電梯與觸發事件爲同一層樓
						if(node.y == 80 || node.y == 140){
						
							elevator.isRun = false;
						}else{
							if(elevator.isClick && elevator.targetFloor > 5){
							
								elevator.derection = Elevator.DOWN;
								elevator.isClick = false;
								elevator.distance = 140;
							}else{
								
								elevator.derection = Elevator.UP; 
								elevator.distance = 80;
							}
							
							elevator.isRun = true;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 5;
						}
					}
					//電梯外按鈕點擊數累加
					if(elevator.targetFloor >= 5 && elevator.currentFloor <= 5
							&& elevator.distance < 80){
						
						elevator.arrayClickOutSide.add(80);
					}
				}
				if(e.getSource() == btnDown5F){
					
					if(elevator.arrayClickInSide.size() != 0){
						
						elevator.arrayClickRunning.clear();
						elevator.arrayClickOutSide.add(140);
					}
					if(elevator.isAllowRunOutSide){
						
						//校驗電梯與觸發事件爲同一層樓
						if(node.y == 80 || node.y == 140){
						
							elevator.isRun = false;
						}else{
							if(elevator.isClick && elevator.targetFloor < 5){
							
								elevator.derection = Elevator.UP;
								elevator.isClick = false;
								elevator.distance = 80;
							}else{
								
								elevator.derection = Elevator.DOWN; 
								elevator.distance = 140;
							}
							
							elevator.isRun = true;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 5;
						}
					}
					//電梯外按鈕點擊數累加
					if(elevator.targetFloor <= 5 && elevator.currentFloor >= 5
							&& elevator.distance > 140){
						
						elevator.arrayClickOutSide.add(140);
					}

				}
				if(e.getSource() == btnDown6F){
					
					if(elevator.arrayClickInSide.size() != 0){
						
						elevator.arrayClickRunning.clear();
						elevator.isAllowRunOutSide = true;
					}
					if(elevator.isAllowRunOutSide){
						
						//校驗電梯與觸發事件爲同一層樓
						if(node.y == 0){
						
							elevator.isRun = false;
						}else{
							
							elevator.isRun = true;
							elevator.isAllowRunOutSide = false;
							elevator.derection = Elevator.UP; 
							elevator.distance = 0;
							elevator.targetFloor = 6;
						}
					}
				}
				if(e.getSource() == btnNum1){
					if(elevator.isAllowRunInSide){
						if(elevator.currentFloor > 1){
							
							elevator.derection = Elevator.DOWN;
							elevator.arrayClickInSide.add(460);
							elevator.isAllowRunInSide = false;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 1;
						}
					}
				}
				if(e.getSource() == btnNum2){
					
					if(elevator.isAllowRunInSide){
						if(elevator.currentFloor != 2){
							if(elevator.currentFloor < 2){
							
								elevator.derection = Elevator.UP;
								elevator.arrayClickInSide.add(320);
							}else{
								
								elevator.derection = Elevator.DOWN;
								elevator.arrayClickInSide.add(380);
							}
							
							elevator.isAllowRunInSide = false;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 2;
						}
					}
				}
				if(e.getSource() == btnNum3){ 
					if(elevator.isAllowRunInSide){
						if(elevator.currentFloor != 3){
							if(elevator.currentFloor < 3){
							
								elevator.derection = Elevator.UP;
								elevator.arrayClickInSide.add(240);
							}else{
								
								elevator.derection = Elevator.DOWN;
								elevator.arrayClickInSide.add(300);
							}
							
							elevator.isAllowRunInSide = false;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 3;
						}
					}
				}
				if(e.getSource() == btnNum4){
					if(elevator.isAllowRunInSide){
						if(elevator.currentFloor != 4){
							if(elevator.currentFloor < 4){
							
								elevator.derection = Elevator.UP;
								elevator.arrayClickInSide.add(160);
							}else{
								
								elevator.derection = Elevator.DOWN;
								elevator.arrayClickInSide.add(220);
							}
							
							elevator.isAllowRunInSide = false;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 4;
						}
					} 
				}
				if(e.getSource() == btnNum5){
					if(elevator.isAllowRunInSide){
						if(elevator.currentFloor != 5){
							if(elevator.currentFloor < 5){
							
								elevator.derection = Elevator.UP;
								elevator.arrayClickInSide.add(80);
							}else{
								
								elevator.derection = Elevator.DOWN;
								elevator.arrayClickInSide.add(140);
							}
							
							elevator.isAllowRunInSide = false;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 5;
						}
					} 
				}	
				if(e.getSource() == btnNum6){
					if(elevator.isAllowRunInSide){
						if(elevator.currentFloor < 6){
							
							elevator.derection = Elevator.UP;
							elevator.arrayClickInSide.add(0);
							elevator.isAllowRunInSide = false;
							elevator.isAllowRunOutSide = false;
							elevator.targetFloor = 6;
						}
					} 
				}
				if(e.getSource() == btnClose){
					
					if(elevator.arrayClickInSide.size() != 0){
						
						//當前電梯停靠樓層與目標樓層相同,此操作無效
						if(elevator.currentFloor == elevator.targetFloor){
							
							elevator.isRun = false;
						}else{
							
							elevator.isRun = true;
							elevator.isAllowRunInSide = false;
						}
					}else{
						
						elevator.isAllowRunOutSide = true;
					}
					
					if(elevator.arrayClickOutSide.size() != 0){
						
						elevator.isRun = true;
					}
				} 
			}
		};
		
		// 監控頁面上所有的動作,系統需要監控狀態,得以響應動作
		btnUp1F.addActionListener(seActionListener);
		btnDown1F.addActionListener(seActionListener);
		btnUp2F.addActionListener(seActionListener);
		btnDown2F.addActionListener(seActionListener);
		btnUp3F.addActionListener(seActionListener);
		btnDown3F.addActionListener(seActionListener);
		btnUp4F.addActionListener(seActionListener);
		btnDonw4F.addActionListener(seActionListener);
		btnUp5F.addActionListener(seActionListener);
		btnDown5F.addActionListener(seActionListener);
		btnUp6F.addActionListener(seActionListener);
		btnDown6F.addActionListener(seActionListener);
		btnNum1.addActionListener(seActionListener);
		btnNum2.addActionListener(seActionListener);
		btnNum3.addActionListener(seActionListener);
		btnNum4.addActionListener(seActionListener);
		btnNum5.addActionListener(seActionListener);
		btnNum6.addActionListener(seActionListener);
		btnClose.addActionListener(seActionListener); 
	}
	private void init(){
		
		// 窗口設置
		setTitle("SimulatedElvetor (SE) 1.1");
		setSize(400,530);
		setLayout(null);
		setResizable(false);
		
		// 各樓層位置數字
		lab1F = new JLabel(" 1");
		lab1F.setBounds(85,405,20,80);
		lab1F.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(lab1F);
		lab2F = new JLabel(" 2");
		lab2F.setBounds(85,325,20,80);
		lab2F.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(lab2F);
		lab3F = new JLabel(" 3");
		lab3F.setBounds(85,245,20,80);
		lab3F.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(lab3F);
		lab4F = new JLabel(" 4");
		lab4F.setBounds(85,165,20,80);
		lab4F.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(lab4F);
		lab5F = new JLabel(" 5");
		lab5F.setBounds(85,85,20,80);
		lab5F.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(lab5F);
		lab6F = new JLabel(" 6");
		lab6F.setBounds(85,5,20,80);
		lab6F.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(lab6F);	
		
		// 各層樓梯呼叫按鈕設置
	    btnUp6F = new JButton("上");
		btnUp6F.setBounds(105, 5, 50, 40);
		btnUp6F.setEnabled(false);
		add(btnUp6F);
		btnDown6F = new JButton("下");
		btnDown6F.setBounds(105, 45, 50, 40);
		add(btnDown6F);
		btnUp5F = new JButton("上");
		btnUp5F.setBounds(105, 85, 50, 40);
		add(btnUp5F);
		btnDown5F = new JButton("下");
		btnDown5F.setBounds(105, 125, 50, 40);
		add(btnDown5F);
		btnUp4F = new JButton("上");
		btnUp4F.setBounds(105, 165, 50, 40);
		add(btnUp4F);
		btnDonw4F = new JButton("下");
		btnDonw4F.setBounds(105, 205, 50, 40);
		add(btnDonw4F);
		btnUp3F = new JButton("上");
		btnUp3F.setBounds(105, 245, 50, 40);
		add(btnUp3F);
		btnDown3F = new JButton("下");
		btnDown3F.setBounds(105, 285, 50, 40);
		add(btnDown3F);
		btnUp2F = new JButton("上");
		btnUp2F.setBounds(105, 325, 50, 40);
		add(btnUp2F);
		btnDown2F = new JButton("下");
		btnDown2F.setBounds(105, 365, 50, 40);
		add(btnDown2F);
		btnUp1F = new JButton("上");
		btnUp1F.setBounds(105, 405, 50, 40);
		add(btnUp1F);
		btnDown1F = new JButton("下");
		btnDown1F.setBounds(105, 445, 50, 40);
		btnDown1F.setEnabled(false);
		add(btnDown1F);
		
		// 電梯內的樓層按鈕區域
		btnNum1 = new JButton("1");
		btnNum1.setBounds(200, 360, 45, 30);
		add(btnNum1);
		btnNum2 = new JButton("2");
		btnNum2.setBounds(245, 360, 45, 30);
		add(btnNum2);
		btnNum3 = new JButton("3");
		btnNum3.setBounds(290, 360, 45, 30);
		add(btnNum3);
		btnNum4 = new JButton("4");
		btnNum4.setBounds(200, 390, 45, 30);
		add(btnNum4);
		btnNum5 = new JButton("5");
		btnNum5.setBounds(245, 390, 45, 30);
		add(btnNum5);
		btnNum6 = new JButton("6");
		btnNum6.setBounds(290, 390, 45, 30);
		add(btnNum6);
		btnClose = new JButton("關門");
		btnClose.setBounds(200, 330, 135, 30);
		add(btnClose); 
		
		// 創建電梯
		JPanel panElevator = new JPanel();
		elevator = new Elevator();
		panElevator = new ElevatorPanel(elevator);
		panElevator.setBounds(5,5,80,480);
		panElevator.setBorder(BorderFactory.createLineBorder(Color.darkGray));
		
		// 顯示牌
		labDisplay = new JLabel(" 顯   示   牌");
		labDisplay.setBounds(200,200,90,30);
		labDisplay.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(labDisplay); 
		
		// 顯示當前所在層數
		labFloor = new JLabel();
		labFloor.setBounds(200,231,90,30);
		labFloor.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(labFloor); 
		
		// 電梯運行狀態
		labStatus = new JLabel();
		labStatus.setBounds(200,262,90,30);
		labStatus.setBorder(BorderFactory.createLineBorder(Color.blue));
		add(labStatus); 
		
		// 電梯運行添加多線程控制
		Runnable runElevator = new RunElevator(elevator,panElevator);
		Thread thrElevator = new Thread(runElevator);
		thrElevator.start();
		
		// 顯示牌添加多線程控制
		Runnable runStatus = new StatusRunnable(elevator,labFloor,labStatus);
		Thread thrStatus = new Thread(runStatus);
		thrStatus.start();
		
		add(panElevator);
	}
}
 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章