您的位置:首页 > 移动开发 > 微信开发

JAVA小程序开发之模拟电梯APP (源码详解)

2014-01-05 23:18 585 查看
程序名称:模拟电梯系统

编码时间:30-40个小时

参与人数:两个

各自职责:zhidao(需求分析),Mars(编码)

操作平台:win7

编程语言:java swing

开发工具:Eclipse(Helios Service Release 1)

开发目的:业余时间自我技能提升,通过尝试不同的开发风格,掌握不同的开发技巧。还有与其他非工作伙伴共同开发,学会与不同类型伙伴交流。总之,主动提高对编程的了解,一切为了在工作中能有更好的发展。

开发意义:不断提升自己,超越自己。

开发理由:我经常会每天乘坐着电梯上下班,对电梯内部的实现原理尤其好奇,这是什么样的原理?我至少知道里面肯定是用到多线程知识,为了那份好奇之心,我决定模拟一个小程序,满足我的好奇之心。



项目简介:

此项目模拟我们日常乘坐电梯的摸样与实现原理,考虑到实现的复杂原因,我只是实现了一些简单的功能。电梯一台,楼层6层,每层楼有上下两个按钮(1层与6层只有一个),电梯内有7个按钮(1个关门,6个各楼层位置按钮),显示牌一块(记录当前楼层与电梯运行状态)。

此系统模拟的画面,比较抽象,不过最关键是内部的实现思路。

鄙人把所有代码贡献出来,只希望看过的读者,能给本人一点小建议。源码如下:

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.Timer;
import java.util.TimerTask;
import java.util.TreeSet;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Add on 20140105
* @author Mars
*
*/
public class SimulatedElevator {

public static void main(String[] args){
seFrame frame = new seFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

class SnakeRunnable implements Runnable{
private Snake snake;
private Component component;

public SnakeRunnable(Snake snake,Component component){
this.snake = snake;
this.component = component;
}

public void run(){
while (true){
try {
snake.move();
component.repaint();

if(snake.currentFloor == 1){
snake.isAllowRunInSide = true;
}

Iterator iteratorOut = snake.arrayClickOutSide.iterator();
int k;
while(iteratorOut.hasNext()){
k = (Integer) iteratorOut.next();

if(snake.currentDistance == k){
snake.isRun = false;
}
}

Iterator iteratorIn = snake.arrayClickInSide.iterator();
while(iteratorIn.hasNext()){
k = (Integer) iteratorIn.next();
if(snake.currentDistance == k){
snake.isRun = false;
iteratorIn.remove();
snake.isAllowRunInSide = true;
}
}

Iterator iteratorRunning = snake.arrayClickRunning.iterator();
while(iteratorRunning.hasNext()){
k = (Integer) iteratorRunning.next();
if(snake.currentDistance == k){
snake.isRun = false;
iteratorRunning.remove();
}

}

/**				此方法为电梯按定义时间关闭,因功能未完善先注释,后续有时间再完善
* 				if(snake.isRun == false && snake.isAllowRunOutSide == false
&& snake.arrayClickOutSide.size() == 0){
final Timer timer = new Timer();

TimerTask tt=new TimerTask(){
public void run() {
int s=1;
System.out.println("5秒内若无任何操作,电梯门将自动关闭 !  ");
snake.isAllowRunOutSide = true;
timer.cancel();
}
};
timer.schedule(tt, 5000);

}
*/

//电梯每0.5秒移动一次
Thread.sleep(snake.speed);
}
catch (Exception e){
}
}
}
}

class StatusRunnable implements Runnable{
private JLabel floorLabel;
private JLabel statusLabel;
private Snake snake;

public StatusRunnable(Snake snake,JLabel floorLabel,JLabel statusLabel){
this.floorLabel = floorLabel;
this.statusLabel = statusLabel;
this.snake = snake;
}
public void run(){
String status = "";

while(true){
switch(snake.derection){
case 2:
status = "向   上";
break;
case 4:
status = "向   下";
break;
default:
status = "向   上";
break;
}
if(snake.isRun == false){
status = "停   止";
}
statusLabel.setText(status);
floorLabel.setText("" + snake.currentFloor);
}
}
}

class Snake{
boolean isRun;
ArrayList<Node> body;
Set arrayClickOutSide;
Set arrayClickInSide;
Set arrayClickRunning;
Node food;
int derection;
int score;
int status;
int speed;
int distance;
int currentFloor;
int targetFloor;
int interrupDistance;
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 LEEF = 1;
public static final int UP = 2;
public static final int RIGHT = 3;
public static final int DOWN = 4;
public static final int floor1 = 1;
public static final int floor2 = 2;
public static final int floor3 = 3;
public static final int floor4 = 4;
public static final int floor5 = 5;
public static final int floor6 = 6;
boolean isTurnDown;
boolean isTurnUp;
boolean isFirstMoving;
boolean isClick;
boolean isAllowRunOutSide;
boolean isAllowRunInSide;
boolean isInterrupt;
boolean isClickInside;
boolean isClickClose;
String moveStatus;

public Snake(){
speed = Snake.SLOW;
score = 0;
isRun = false;
status = Snake.PAUSED;
derection = Snake.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("YY  "+Y);
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{
public static final int W = 80;
public static final int H = 20;
int x;
int y;

public Node(int x,int y){
this.x = x;
this.y = y;
}
}

class SnakePanel extends JPanel{
Snake snake;

public SnakePanel(Snake snake){
this.snake = snake;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
/**
* 电梯本体
* 这里相当于画四(snake.body.size())块蛇本身,3*20*20
*/
Node node = null;
g.setColor(Color.ORANGE);
for(int i = 0;i < snake.body.size();i++){
node = snake.body.get(i);
g.fillRect(node.x, node.y, node.W, node.H);
}
}
}

class seFrame extends JFrame{

private JButton jb_1F_up;//各层按钮
private JButton jb_1F_down;//各层按钮
private JButton jb_2F_up;//各层按钮
private JButton jb_2F_down;//各层按钮
private JButton jb_3F_up;//各层按钮
private JButton jb_3F_down;//各层按钮
private JButton jb_4F_up;//各层按钮
private JButton jb_4F_down;//各层按钮
private JButton jb_5F_up;//各层按钮
private JButton jb_5F_down;//各层按钮
private JButton jb_6F_up;//各层按钮
private JButton jb_6F_down;//各层按钮
private JButton jb_num_1;//电梯内按钮号码-1
private JButton jb_num_2;//电梯内按钮号码-2
private JButton jb_num_3;//电梯内按钮号码-3
private JButton jb_num_4;//电梯内按钮号码-4
private JButton jb_num_5;//电梯内按钮号码-5
private JButton jb_num_6;//电梯内按钮号码-6
private JButton jb_close;//电梯内关门按钮-关门
private JButton jb_ok;//电梯内确认按钮
private JLabel jl_1F;//各楼层数字-1
private JLabel jl_2F;//各楼层数字-2
private JLabel jl_3F;//各楼层数字-3
private JLabel jl_4F;//各楼层数字-4
private JLabel jl_5F;//各楼层数字-5
private JLabel jl_6F;//各楼层数字-6
private JLabel displayLabel;//显示牌
private JLabel floorLabel;//显示牌
private JLabel statusLabel;//显示牌
private Snake snake;//电梯

public seFrame(){

//页面各种对象初始化
init();
//动作监控,响应方法
ActionListener l = new ActionListener(){
public void actionPerformed(ActionEvent e){
Node node = snake.body.get(0);
if(e.getSource() == jb_1F_up){

if(snake.arrayClickInSide.size() != 0){
snake.isAllowRunOutSide = true;
}
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 400 || node.y == 460){
snake.isRun = false;
}else{
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.derection = Snake.DOWN;
snake.distance = 460;
snake.targetFloor = 1;
}
}
}
if(e.getSource() == jb_2F_up){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.arrayClickOutSide.add(320);
}else{
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 380 || node.y == 320){
snake.isRun = false;
}else{

if(snake.isClick && snake.targetFloor > 2){
snake.derection = Snake.DOWN;
snake.isClick = false;
snake.distance = 380;
}else{
snake.derection = Snake.UP;
snake.distance = 320;
}
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.targetFloor = 2;
}
}
//电梯外按钮点击数累加
if(snake.targetFloor >= 2 && snake.currentFloor <= 2
&& snake.distance < 320){
snake.arrayClickOutSide.add(320);
}
}
}
if(e.getSource() == jb_2F_down){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.arrayClickOutSide.add(380);
}else{
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 380 || node.y == 320){
snake.isRun = false;
}else{

if(snake.isClick && snake.targetFloor < 2){
snake.derection = Snake.UP;
snake.isClick = false;
snake.distance = 320;
}else{
snake.derection = Snake.DOWN;
snake.distance = 380;
}
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.targetFloor = 2;
}
}
//电梯外按钮点击数累加
if(snake.targetFloor <= 2 && snake.currentFloor >= 2
&& snake.distance > 380){
snake.arrayClickOutSide.add(380);
}
}
}
if(e.getSource() == jb_3F_up){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.arrayClickRunning.add(240);
}
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 300 || node.y == 240){
snake.isRun = false;
}else{
if(snake.isClick && snake.targetFloor > 3){
snake.derection = Snake.DOWN;
snake.isClick = false;
snake.distance = 300;
}else{
snake.derection = Snake.UP;
snake.distance = 240;
}
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.targetFloor = 3;
}
}
//电梯外按钮点击数累加
if(snake.targetFloor >= 3 && snake.currentFloor <= 3
&& snake.distance < 240){
snake.arrayClickOutSide.add(240);
}
}
if(e.getSource() == jb_3F_down){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.arrayClickRunning.add(300);
}
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 300 || node.y == 240){
snake.isRun = false;
}else{
if(snake.isClick && snake.targetFloor < 3){
snake.derection = Snake.UP;
snake.isClick = false;
snake.distance = 240;
}else{
snake.derection = Snake.DOWN;
snake.distance = 300;
}
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.targetFloor = 3;
}
}
//电梯外按钮点击数累加
if(snake.targetFloor <= 3 && snake.currentFloor >= 3
&& snake.distance > 300){
snake.arrayClickOutSide.add(300);
}
}
if(e.getSource() == jb_4F_up){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.arrayClickRunning.add(160);
}
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 160 || node.y == 220){
snake.isRun = false;
}else{
if(snake.isClick && snake.targetFloor > 4){
snake.derection = Snake.DOWN;
snake.isClick = false;
snake.distance = 220;
}else{
snake.derection = Snake.UP;
snake.distance = 160;
}
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.targetFloor = 4;
}
}
//电梯外按钮点击数累加
if(snake.targetFloor >= 4 && snake.currentFloor <= 4
&& snake.distance < 160){
snake.arrayClickOutSide.add(160);
}
}
if(e.getSource() == jb_4F_down){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.arrayClickRunning.add(220);
}
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 160 || node.y == 220){
snake.isRun = false;
}else{

if(snake.isClick && snake.targetFloor < 4){
snake.derection = Snake.UP;
snake.isClick = false;
snake.distance = 160;
}else{
snake.derection = Snake.DOWN;
snake.distance = 220;
}
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.targetFloor = 4;
}
}
//电梯外按钮点击数累加
if(snake.targetFloor <= 4 && snake.currentFloor >= 4
&& snake.distance > 220){
snake.arrayClickOutSide.add(220);
}
}
if(e.getSource() == jb_5F_up){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.arrayClickOutSide.add(80);
}
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 80 || node.y == 140){
snake.isRun = false;
}else{
if(snake.isClick && snake.targetFloor > 5){
snake.derection = Snake.DOWN;
snake.isClick = false;
snake.distance = 140;
}else{
snake.derection = Snake.UP;
snake.distance = 80;
}
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.targetFloor = 5;
}
}
//电梯外按钮点击数累加
if(snake.targetFloor >= 5 && snake.currentFloor <= 5
&& snake.distance < 80){
snake.arrayClickOutSide.add(80);
}
}
if(e.getSource() == jb_5F_down){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.arrayClickOutSide.add(140);
}
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 80 || node.y == 140){
snake.isRun = false;
}else{
if(snake.isClick && snake.targetFloor < 5){
snake.derection = Snake.UP;
snake.isClick = false;
snake.distance = 80;
}else{
snake.derection = Snake.DOWN;
snake.distance = 140;
}
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.targetFloor = 5;
}
}
//电梯外按钮点击数累加
if(snake.targetFloor <= 5 && snake.currentFloor >= 5
&& snake.distance > 140){
snake.arrayClickOutSide.add(140);
}

}
if(e.getSource() == jb_6F_down){

if(snake.arrayClickInSide.size() != 0){
snake.arrayClickRunning.clear();
snake.isAllowRunOutSide = true;
}
if(snake.isAllowRunOutSide){

//校验电梯与触发事件为同一层楼
if(node.y == 0){
snake.isRun = false;
}else{
snake.isRun = true;
snake.isAllowRunOutSide = false;
snake.derection = Snake.UP;
snake.distance = 0;
snake.targetFloor = 6;
}
}
}
if(e.getSource() == jb_num_1){
if(snake.isAllowRunInSide){
if(snake.currentFloor > 1){
snake.derection = Snake.DOWN;
snake.arrayClickInSide.add(460);
snake.isAllowRunInSide = false;
snake.isAllowRunOutSide = false;
snake.targetFloor = 1;
}
}
}
if(e.getSource() == jb_num_2){

if(snake.isAllowRunInSide){
if(snake.currentFloor != 2){
if(snake.currentFloor < 2){
snake.derection = Snake.UP;
snake.arrayClickInSide.add(320);
}else{
snake.derection = Snake.DOWN;
snake.arrayClickInSide.add(380);
}
snake.isAllowRunInSide = false;
snake.isAllowRunOutSide = false;
snake.targetFloor = 2;
}
}
}
if(e.getSource() == jb_num_3){
if(snake.isAllowRunInSide){
if(snake.currentFloor != 3){
if(snake.currentFloor < 3){
snake.derection = Snake.UP;
snake.arrayClickInSide.add(240);
}else{
snake.derection = Snake.DOWN;
snake.arrayClickInSide.add(300);
}
snake.isAllowRunInSide = false;
snake.isAllowRunOutSide = false;
snake.targetFloor = 3;
}
}
}
if(e.getSource() == jb_num_4){
if(snake.isAllowRunInSide){
if(snake.currentFloor != 4){
if(snake.currentFloor < 4){
snake.derection = Snake.UP;
snake.arrayClickInSide.add(160);
}else{
snake.derection = Snake.DOWN;
snake.arrayClickInSide.add(220);
}
snake.isAllowRunInSide = false;
snake.isAllowRunOutSide = false;
snake.targetFloor = 4;
}
}
}
if(e.getSource() == jb_num_5){
if(snake.isAllowRunInSide){
if(snake.currentFloor != 5){
if(snake.currentFloor < 5){
snake.derection = Snake.UP;
snake.arrayClickInSide.add(80);
}else{
snake.derection = Snake.DOWN;
snake.arrayClickInSide.add(140);
}
snake.isAllowRunInSide = false;
snake.isAllowRunOutSide = false;
snake.targetFloor = 5;
}
}
}
if(e.getSource() == jb_num_6){
if(snake.isAllowRunInSide){
if(snake.currentFloor < 6){
snake.derection = Snake.UP;
snake.arrayClickInSide.add(0);
snake.isAllowRunInSide = false;
snake.isAllowRunOutSide = false;
snake.targetFloor = 6;
}
}
}
if(e.getSource() == jb_close){

if(snake.arrayClickInSide.size() != 0){

//当前电梯停靠楼层与目标楼层相同,此操作无效
if(snake.currentFloor == snake.targetFloor){
snake.isRun = false;
}else{
snake.isRun = true;
snake.isAllowRunInSide = false;
}
}else{
snake.isAllowRunOutSide = true;
}

if(snake.arrayClickOutSide.size() != 0){
snake.isRun = true;
}
}
}
};

//添加所有页面上的动作,系统需要监控状态
jb_1F_up.addActionListener(l);
jb_1F_down.addActionListener(l);
jb_2F_up.addActionListener(l);
jb_2F_down.addActionListener(l);
jb_3F_up.addActionListener(l);
jb_3F_down.addActionListener(l);
jb_4F_up.addActionListener(l);
jb_4F_down.addActionListener(l);
jb_5F_up.addActionListener(l);
jb_5F_down.addActionListener(l);
jb_6F_up.addActionListener(l);
jb_6F_down.addActionListener(l);
jb_num_1.addActionListener(l);
jb_num_2.addActionListener(l);
jb_num_3.addActionListener(l);
jb_num_4.addActionListener(l);
jb_num_5.addActionListener(l);
jb_num_6.addActionListener(l);
jb_close.addActionListener(l);
}
private void init(){
//窗口设置
setTitle("SimulatedElvetor (SE) 1.0");
setSize(400,530);
setLayout(null);
setResizable(false);

//各楼层数字
jl_1F = new JLabel(" 1");
jl_1F.setBounds(85,405,20,80);
jl_1F.setBorder(BorderFactory.createLineBorder(Color.blue));
add(jl_1F);
jl_2F = new JLabel(" 2");
jl_2F.setBounds(85,325,20,80);
jl_2F.setBorder(BorderFactory.createLineBorder(Color.blue));
add(jl_2F);
jl_3F = new JLabel(" 3");
jl_3F.setBounds(85,245,20,80);
jl_3F.setBorder(BorderFactory.createLineBorder(Color.blue));
add(jl_3F);
jl_4F = new JLabel(" 4");
jl_4F.setBounds(85,165,20,80);
jl_4F.setBorder(BorderFactory.createLineBorder(Color.blue));
add(jl_4F);
jl_5F = new JLabel(" 5");
jl_5F.setBounds(85,85,20,80);
jl_5F.setBorder(BorderFactory.createLineBorder(Color.blue));
add(jl_5F);
jl_6F = new JLabel(" 6");
jl_6F.setBounds(85,5,20,80);
jl_6F.setBorder(BorderFactory.createLineBorder(Color.blue));
add(jl_6F);

//各层楼梯按钮设置
jb_6F_up = new JButton("上");
jb_6F_up.setBounds(105, 5, 50, 40);
jb_6F_up.setEnabled(false);
add(jb_6F_up);
jb_6F_down = new JButton("下");
jb_6F_down.setBounds(105, 45, 50, 40);
add(jb_6F_down);
jb_5F_up = new JButton("上");
jb_5F_up.setBounds(105, 85, 50, 40);
add(jb_5F_up);
jb_5F_down = new JButton("下");
jb_5F_down.setBounds(105, 125, 50, 40);
add(jb_5F_down);
jb_4F_up = new JButton("上");
jb_4F_up.setBounds(105, 165, 50, 40);
add(jb_4F_up);
jb_4F_down = new JButton("下");
jb_4F_down.setBounds(105, 205, 50, 40);
add(jb_4F_down);
jb_3F_up = new JButton("上");
jb_3F_up.setBounds(105, 245, 50, 40);
add(jb_3F_up);
jb_3F_down = new JButton("下");
jb_3F_down.setBounds(105, 285, 50, 40);
add(jb_3F_down);
jb_2F_up = new JButton("上");
jb_2F_up.setBounds(105, 325, 50, 40);
add(jb_2F_up);
jb_2F_down = new JButton("下");
jb_2F_down.setBounds(105, 365, 50, 40);
add(jb_2F_down);
jb_1F_up = new JButton("上");
jb_1F_up.setBounds(105, 405, 50, 40);
add(jb_1F_up);
jb_1F_down = new JButton("下");
jb_1F_down.setBounds(105, 445, 50, 40);
jb_1F_down.setEnabled(false);
add(jb_1F_down);

//电梯内的楼层按钮区域
jb_num_1 = new JButton("1");
jb_num_1.setBounds(200, 360, 45, 30);
add(jb_num_1);
jb_num_2 = new JButton("2");
jb_num_2.setBounds(245, 360, 45, 30);
add(jb_num_2);
jb_num_3 = new JButton("3");
jb_num_3.setBounds(290, 360, 45, 30);
add(jb_num_3);
jb_num_4 = new JButton("4");
jb_num_4.setBounds(200, 390, 45, 30);
add(jb_num_4);
jb_num_5 = new JButton("5");
jb_num_5.setBounds(245, 390, 45, 30);
add(jb_num_5);
jb_num_6 = new JButton("6");
jb_num_6.setBounds(290, 390, 45, 30);
add(jb_num_6);
jb_close = new JButton("关门");
jb_close.setBounds(200, 330, 135, 30);
add(jb_close);

//创建电梯
JPanel snakePanel = new JPanel();
snake = new Snake();
snakePanel = new SnakePanel(snake);
snakePanel.setBounds(5,5,80,480);
snakePanel.setBorder(BorderFactory.createLineBorder(Color.darkGray));

//显示牌
displayLabel = new JLabel(" 显   示   牌");
displayLabel.setBounds(200,200,90,30);
displayLabel.setBorder(BorderFactory.createLineBorder(Color.blue));
add(displayLabel);

//目前所在层数
floorLabel = new JLabel();
floorLabel.setBounds(200,231,90,30);
floorLabel.setBorder(BorderFactory.createLineBorder(Color.blue));
add(floorLabel);

//电梯运行状态
statusLabel = new JLabel();
statusLabel.setBounds(200,262,90,30);
statusLabel.setBorder(BorderFactory.createLineBorder(Color.blue));
add(statusLabel);

//电梯运行添加多线程控制
Runnable r1 = new SnakeRunnable(snake,snakePanel);
Thread t1 = new Thread(r1);
t1.start();

//显示牌添加多线程控制
Runnable r2 = new StatusRunnable(snake,floorLabel,statusLabel);
Thread t2 = new Thread(r2);
t2.start();

add(snakePanel);
}
}
因为这都是花销业余时间编写,时间紧迫,我自己感觉有很多不完善的地方。

自我感觉,代码编写不足之处:命名,结构冗余。

希望各位多提意见,若以上的代码有无不明之处,可以留言,我们一起讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: