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