设计实现一个简单的交通信号灯模型,如图 2-1 所示。要求当定时时间到 的时候,该逻辑电路即发出一个信号给交通灯,交通灯模型则根据当前 状态下的信号进行信号颜色切换(当前是绿灯信号,则变为黄灯亮;若 当前是黄灯信号,则切换为红灯亮;若当前是红灯信号,则切换为绿灯 亮)。具体要求如下:

1) 编写函数实现,每次接收到定时时间到消息时,实现三种交通信号间 的正确切换。 
2) 在界面上用“定时”按钮或以系统时间展示信号灯之间的切换功能。 
3) 切换到黄灯信号时考虑闪烁功能,具体时长自行设置。 
4) 考虑现实实际,把握不同信号之间的时间间隔,并增加设置界面,做 到自如修改。

Window_Light.java

package light;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.Date;class circle extends JPanel {        //圆形int x,y,width,height;Color c=Color.white;void get(int x,int y,int width,int height){this.x=x;this.y=y;this.width=width;this.height=height;}public void paint(Graphics g) {g.setColor(c);g.fillOval(x, y, width, height);}public void updata(Graphics g) {g.clearRect(x, y, width, height);paint(g);}
}public class Window_Light extends JFrame implements ActionListener,Runnable{circle green,yellow,red;JLabel label_time,label_set,label_g,label_y,label_r;JTextField time,text_g,text_y,text_r;JButton button_apply,button_exit;Thread thread;boolean flag=true;Color state=Color.green; //当前的状态Window_Light(){setLayout(null);init();setBounds(350,350,350,500);setTitle("红绿灯");setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}void init() {thread=new Thread(this);green=new circle();green.get(20,20,100,100);green_change();yellow=new circle();yellow.get(20,20,100,100);red=new circle();red.get(20,20,100,100);time=new JTextField(120);time.setEditable(false);//setTimer(time);Timer timeAction = new Timer(1000, new ActionListener() {public void actionPerformed(ActionEvent e) {long timemillis = System.currentTimeMillis();//转换日期显示格式SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");time.setText(df.format(new Date(timemillis)));}});timeAction.start();text_g=new JTextField(100);text_y=new JTextField(100);text_r=new JTextField(100);label_time=new JLabel("系统时间");label_set=new JLabel("设置");label_g=new JLabel("绿灯");label_y=new JLabel("黄灯");label_r=new JLabel("红灯");button_apply=new JButton("应用");button_apply.addActionListener(this);button_exit=new JButton("结束");button_exit.addActionListener(this);//左边add(green);add(yellow);add(red);add(label_time);add(time);//右边add(label_set);add(label_g);add(label_y);add(label_r);add(text_g);add(text_y);add(text_r);add(button_apply);add(button_exit);//左边green.setBounds(0,0,140,120);yellow.setBounds(0,120,140,120);red.setBounds(0,240,140,120);label_time.setBounds(50, 380, 90, 20);time.setBounds(20,400, 120, 20);//右边label_set.setBounds(200, 20, 40, 20);label_g.setBounds(160, 60, 40, 20);label_y.setBounds(160, 170, 40, 20);label_r.setBounds(160, 290, 40, 20);text_g.setBounds(200, 60, 100, 20);text_y.setBounds(200, 170, 100, 20);text_r.setBounds(200, 290, 100, 20);button_apply.setBounds(150, 400, 60, 20);button_exit.setBounds(230, 400, 60, 20);}public void actionPerformed(ActionEvent e) {if(e.getSource()==button_apply){flag=true;if(!(thread.isAlive()))thread=new Thread(this);try {thread.start();}catch(Exception ee) {}}else {flag=false;}}//得到时间void setTimer(JTextField time){final JTextField varTime = time;Timer timeAction = new Timer(1000, new ActionListener() {public void actionPerformed(ActionEvent e) {long timemillis = System.currentTimeMillis();//转换日期显示格式SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");varTime.setText(df.format(new Date(timemillis)));}});timeAction.start();}void change(int g_time,int y_time,int r_time) {while(flag) {if(state==Color.green) {try {Thread.sleep(g_time*1000);} catch (Exception e) {}green_change();yellow_change();state=Color.yellow;}else if(state==Color.yellow) {for(int i=0;i<y_time*2;i++) {try {Thread.sleep(500);} catch (Exception e) {}yellow_change();}red_change();yellow_change();state=Color.red;}else {try {Thread.sleep(r_time*1000);} catch (Exception e) {}red_change();green_change();state=Color.green;}}}void green_change() {if(green.c==Color.green) {green.c=Color.white;green.repaint();}else {green.c=Color.green;green.repaint();}}void yellow_change() {if(yellow.c==Color.yellow) {yellow.c=Color.white;yellow.repaint();}else {yellow.c=Color.yellow;yellow.repaint();}}void red_change() {if(red.c==Color.red) {red.c=Color.white;red.repaint();}else {red.c=Color.red;red.repaint();}}public void run() {int g_time = 0,y_time = 0,r_time = 0;try {g_time=Integer.parseInt(text_g.getText());y_time=Integer.parseInt(text_y.getText());r_time=Integer.parseInt(text_r.getText());}catch(Exception ee) {}change(g_time,y_time,r_time);}}

Main.java

package light;public class Main {public static void main(String[] args) {// TODO 自动生成的方法存根new Window_Light();}}

Java实现的信号灯相关推荐

  1. java模拟交通信号灯_java 多线程交通信号灯模拟过程详解

    这学期我们java课程的课程设计项目----交通信号灯的线程设计 实验目的:多线程设计,同步机制 题意 设计一个交通信号灯类: 变量:位置.颜色(红.黄.绿).显示时间(秒). 方法:切换信号灯. 创 ...

  2. 生产者和消费者问题详解

    定义 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题描述了 ...

  3. 计算机毕业设计题目参考

    jsp1986 变电站直流设备及仪表监控管理系统的设计与实现 jsp1987 咸鱼企业员工考勤管理系统 jsp1988 农产品质量分级检测系统的实现与设计 jsp1989 Bole招聘平台 jsp19 ...

  4. java count 在哪一类里_java 5线程中 Semaphore信号灯,CyclicBarrier类,CountDownLatch计数器以及Exchanger类使用...

    先来讲解一下Semaphore信号灯的作用: 可以维护当前访问自身的线程个数,并提供了同步机制, 使用semaphore可以控制同时访问资源的线程个数 例如,实现一个文件允许的并发访问数. 请看下面的 ...

  5. java信号灯_java 信号灯 Semaphore

    http://blog.csdn.net/java2000_wl/article/details/23556859 import java.util.concurrent.ExecutorServic ...

  6. Java 实训5 编写一个窗体应用程序模拟交通信号灯

    题目描述: 在窗口的北面添加一个下拉列表,该下拉列表有"红灯","绿灯","黄灯"三个选项.在窗口的中心添加一个画布,当用户在下拉列表选择某 ...

  7. java 多线程 信号_Java多线程——Semaphore信号灯

    Semaphore [ˈseməfɔːr]可以维护当前访问自身的线程个数,并提供了同步机制.使用Semaphore可以控制同时访问资源的线程个数(即允许n个任务同时访问这个资源),例如,实现一个文件允 ...

  8. java信号灯_java 多线程-信号灯法

    借助标志位 public class light { public static void main(String[]args) { Tv tv=new Tv(); new Player(tv).st ...

  9. java交通信号灯毕业论文范文_信号灯设计论文,关于基于FPGA的交通信号灯控制系统设计相关参考文献资料-免费论文范文...

    导读:本文关于信号灯设计论文范文,可以做为相关参考文献. 文/ 胡桂戎 陕西警官职业学院 陕西 西安 710021 [摘 要]本文采用FPGA 设计,结合了道路传感器,设计了交通信号灯全感应自适应的控 ...

最新文章

  1. Hibernate的关联关系映射
  2. 阿里云首发Dubbo3.0 + Nacos2.0
  3. c#正则匹配取出文本内容 循环输出
  4. react循环的值为什么要有key_糊盒粘箱为什么要检查表面覆膜电晕值
  5. C++多重继承时调用相应的父类函数
  6. Tensorflow中的变量
  7. CKEditor5安装LaTeX数学公式插件
  8. Python之路【第二十篇】:python项目之旧版抽屉新热榜
  9. SEO到了岌岌可危的时刻吗?
  10. My 2007 Fash game: Elite Shooter
  11. Honey Badger BFT(异步共识算法)笔记
  12. switch按钮文字切换
  13. 【干货】游戏开发团队部门岗位
  14. 非线性回归算法--学习笔记
  15. 基于工业路由器的智慧医疗远程监控系统
  16. 人工智能就业越来越严峻,你还在坚持吗
  17. 小牛采购管理系统 bt
  18. 安装EVA后可能出现无法在EVA输入中文的解决方法
  19. 无线互联网:SP和移动运营商的新战场?
  20. 飞控与地面站的概念和关系

热门文章

  1. Restful 风格请求
  2. Python 实现 Swagger yaml 格式 api 文档合并
  3. Android的.9图片使用问题
  4. AD的设计里面找不到生成PCB选项
  5. sklearn模型中random_state参数的意义
  6. 「IT行业必会的基本概念原理」计算机网路基本概念
  7. ORB-SLAM笔记———ORB-SLAM3概述
  8. SSI服务端包含技术
  9. java学了之后老忘_老程序员的建议,零基础学java,常见的误区和解决方法
  10. 0欧姆电阻、磁珠及电感的作用