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个各楼层位置按钮),显示牌一块(记录当前楼层与电梯运行状态)。
此系统模拟的画面,比较抽象,不过最关键是内部的实现思路。
鄙人把所有代码贡献出来,只希望看过的读者,能给本人一点小建议。源码如下:
自我感觉,代码编写不足之处:命名,结构冗余。
希望各位多提意见,若以上的代码有无不明之处,可以留言,我们一起讨论。
编码时间: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); } }因为这都是花销业余时间编写,时间紧迫,我自己感觉有很多不完善的地方。
自我感觉,代码编写不足之处:命名,结构冗余。
希望各位多提意见,若以上的代码有无不明之处,可以留言,我们一起讨论。
相关文章推荐
- JAVA小程序开发之模拟电梯APP(代码优化)
- java实现捕鱼达人游戏之Java swing图形界面开发游戏项目捕鱼达人源码及实现方式详解
- 开发心得(模拟电梯APP)
- 安卓android程序源码487套+app应用开发教程+视频教学
- android的app,用java程序开发
- 如何开发你的第一个Java Google App Engine 程序
- 模拟游客一天的生活与旅游java程序代写源码
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
- 微信小程序开发详解(七)---微信小程序APP生命周期
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
- android widget 开发实例 : 桌面便签程序的实现详解和源码
- 模拟游客一天的生活与旅游java程序代写源码
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (下)
- java实现潜艇大战游戏之Java swing图形界面开发游戏项目潜艇大战源码及实现方式详解
- 3000门徒内部训练绝密视频(泄密版)第10课:彻底实战详解使用Java开发Spark程序
- Java swing五子棋源码及实现之Java 开发图形界面程序五子棋的实现方式
- 模拟游客一天的生活与旅游java程序代写源码
- 直播APP开发 社交直播平台源码搭建——流媒体技术详解
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)
- android widget 开发实例 : 桌面便签程序的实现详解和源码 (上)