今年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);
}
}