📄 traficlight_ex.java
字号:
tf2.setEditable(false);
forflux1=new Label("设置车流量与信号灯时间的关系");
forflux2=new Label("直行绿灯1秒时间对应的车辆数为");
flux=new TextField("100",15);
start=new Button(" 开始运行 ");
//start.setBackground(Color.ORANGE);
start.addActionListener(this);
stop=new Button(" 退出程序 ");
stop.addActionListener(this);
set=new Button("确定");
set.addActionListener(this);
f.add(mainp,BorderLayout.CENTER);
mainp.add(pkong1);
mainp.add(p1);
mainp.add(pkong2);
mainp.add(p3);
mainp.add(pkong3);
mainp.add(p2);
mainp.add(pkong4);
mainp.add(p4);
mainp.add(pkong5);
/////////////
p1.add(light26);
p1.add(lab3);
p1.add(kong1);
p1.add(kong2);
p1.add(light25);
p1.add(lab4);
p1.add(kong3);
p1.add(kong4);
p1.add(light24);
p1.add(kong5);
p1.add(lab7);
p1.add(lab8);
p1.add(kong6);
p1.add(light23);
p1.add(light22);
p1.add(light21);
///////////////////////////
p2.add(kong7);
p2.add(light10);
p2.add(light11);
p2.add(light12);
p2.add(light9);
p2.add(kong8);
p2.add(lab9);
p2.add(lab10);
p2.add(light8);
p2.add(lab13);
p2.add(kong9);
p2.add(kong10);
p2.add(light7);
p2.add(lab14);
p2.add(kong11);
p2.add(kong12);
///////////////////////////////
p3.add(kong13);
p3.add(kong14);
p3.add(lab15);
p3.add(light27);
p3.add(kong15);
p3.add(kong16);
p3.add(lab16);
p3.add(light28);
p3.add(lab11);
p3.add(lab12);
p3.add(kong17);
p3.add(light29);
p3.add(light212);
p3.add(light211);
p3.add(light210);
p3.add(kong18);
//////////////////////////////
p4.add(light1);
p4.add(light2);
p4.add(light3);
p4.add(kong19);
p4.add(lab5);
p4.add(lab6);
p4.add(kong20);
p4.add(light4);
p4.add(kong21);
p4.add(kong22);
p4.add(lab1);
p4.add(light5);
p4.add(kong23);
p4.add(kong24);
p4.add(lab2);
p4.add(light6);
///////////////////
pkong1.add(fortf1);
pkong1.add(tf1);
pkong1.add(fortf2);
pkong1.add(tf2);
pkong1.add(SNdreGreen);
pkong1.add(SNdre);
pkong1.add(SNleftGreen);
pkong1.add(SNleft);
pkong1.add(EWdreGreen);
pkong1.add(EWdre);
pkong1.add(EWleftGreen);
pkong1.add(EWleft);
//////////////////
pkong3.add(e,BorderLayout.EAST);
pkong3.add(w,BorderLayout.WEST);
pkong3.add(s,BorderLayout.SOUTH);
pkong3.add(n,BorderLayout.NORTH);
pkong3.add(dt,BorderLayout.CENTER);
///////////////
pkong4.add(forflux1);
pkong4.add(forflux2);
pkong4.add(flux);
pkong4.add(set);
pkong4.add(nowLightTime);
pkong4.add(start);
pkong4.add(stop);
/////////////
pkong5.add(CLASS,BorderLayout.SOUTH);
/////////////////////////
light4.TurnOn();
light24.TurnOn();
light1.TurnOn();
light21.TurnOn(); //各信号灯的初始状态
light10.TurnOn();
light210.TurnOn();
light7.TurnOn();
light27.TurnOn();
////////////////////////
f.addWindowListener(new WinClose()); //为框架f注册事件监听程序
f.setVisible(true);
}
///////////////////
//**************************************************************///
////模拟车流量监视系统,获取车流量来设定南北公路,东西公路交通信号灯的时间
public void fluxSetTime()
{
long South_NorthFlux=(long)(Math.random()*800)+350; //用随机函数模拟获取南北公路的车流量
long East_WestFlux=(long)(Math.random()*800)+350; //用随机函数模拟获取东西公路的车流量
if(South_NorthFlux/fluxOfone<4)
{ //当南北方向车流量,与用户设定的1秒内允许通过的车辆数量的商小于4时
light6.setLinghtTime(4); //设置南北公路直行绿灯的时间为4秒
light3.setLinghtTime(3); //设置南北公路左转绿灯的时间为3秒
}
else
{
light6.setLinghtTime(South_NorthFlux/fluxOfone);
light3.setLinghtTime((South_NorthFlux*3)/(fluxOfone*5));
}
/////////////////////////
if(East_WestFlux/fluxOfone<4)
{ //当东西方向车流量,与用户设定的1秒内允许通过的车辆数量的商小于4时
light12.setLinghtTime(4); //设置东西公路直行绿灯的时间为4秒
light9.setLinghtTime(3); //设置东西公路左转绿灯的时间为3秒
}
else
{
light12.setLinghtTime(East_WestFlux/fluxOfone);
light9.setLinghtTime((East_WestFlux*3)/(fluxOfone*5));
}
SNdre.setText(""+light6.getLinghtTime()); //显示各信号灯的时间
SNleft.setText(""+light3.getLinghtTime());
EWdre.setText(""+light12.getLinghtTime());
EWleft.setText(""+light9.getLinghtTime());
tf1.setText(""+South_NorthFlux); //显示当前南北方向的车流量
tf2.setText(""+East_WestFlux); //显示当前东西方向的车流量
}
//////////////////////////////
//***************************************************************///
//////////////////////////////
synchronized void runS_n() //运行南北方向交通灯的方法
{
while(ewrunable)
{
try
{
this.wait();
}
catch(Exception e)
{}
}
ewrunable=true;
notify();
try
{
fluxSetTime(); //获取车流量,并设置信号灯的时间
////////////////
light6.TurnOn();
light26.TurnOn();
light4.TurnOff();
light24.TurnOff(); //1阶段,南北方向直行绿灯亮
light1.TurnOn();
light21.TurnOn();
for(int i=0;i<light6.getLinghtTime()*2;i++)
{
dt.turnOn(1);
this.sleep(500);
dt.turnOff();
this.sleep(500);
}
/////////////////////////////////////////
light5.TurnOn();
light25.TurnOn(); //2阶段,南北方向直行黄灯亮
light6.TurnOff();
light26.TurnOff();
this.sleep(light5.getLinghtTime()*1000);
////////////////////////////////////////
light1.TurnOff();
light21.TurnOff();
light3.TurnOn(); //3阶段,南北方向左转绿灯亮
light23.TurnOn();
light4.TurnOn();
light24.TurnOn();
light5.TurnOff();
light25.TurnOff();
for(int i=0;i<light3.getLinghtTime()*2;i++)
{
dt.turnOn(3);
this.sleep(500);
dt.turnOff();
this.sleep(500);
}
////////////////////////////////////////
light1.TurnOff();
light21.TurnOff();
light2.TurnOn();
light22.TurnOn(); //4阶段,南北方向左转黄灯亮
light3.TurnOff();
light23.TurnOff();
this.sleep(light2.getLinghtTime()*1000);
//////////////////////////////////////////
light1.TurnOn();
light21.TurnOn();
light2.TurnOff(); //5阶段,南北方向直行,左转皆为红灯亮
light22.TurnOff();
}
catch(Exception e)
{}
}
/////////////////////////////////////////////////////////
synchronized void runE_w() //运行东西方向交通灯的方法
{
while(!ewrunable)
{
try
{
this.wait();
}
catch(Exception e)
{}
}
ewrunable=false;
notify();
try
{
//fluxSetTime();
light10.TurnOff(); //5阶段,东西方向直行绿灯亮
light210.TurnOff();
light12.TurnOn();
light212.TurnOn();
for(int i=0;i<light12.getLinghtTime()*2;i++)
{
dt.turnOn(2);
this.sleep(500);
dt.turnOff();
this.sleep(500);
}
//////////////////////////////////////
light11.TurnOn();
light211.TurnOn();
light12.TurnOff(); //6阶段,东西方向直行黄灯亮
light212.TurnOff();
this.sleep(light11.getLinghtTime()*1000);
///////////////////////////////////////
light7.TurnOff();
light27.TurnOff();
light9.TurnOn();
light29.TurnOn();
light10.TurnOn(); //7阶段,东西方向左转绿灯亮
light210.TurnOn();
light11.TurnOff();
light211.TurnOff();
for(int i=0;i<light9.getLinghtTime()*2;i++)
{
dt.turnOn(4);
this.sleep(500);
dt.turnOff();
this.sleep(500);
}
//////////////////////////////////////////
light8.TurnOn();
light28.TurnOn();
light9.TurnOff(); //8阶段,东西方向左转黄灯亮
light29.TurnOff();
this.sleep(light8.getLinghtTime()*1000);
////////////////////////////////////////////
light7.TurnOn();
light27.TurnOn();
light8.TurnOff(); //1阶段,东西方向直行,左转皆为红灯亮
light28.TurnOff();
}
catch(Exception e)
{}
}
public void nowrun()
{
TraficRun1 t1;
TraficRun2 t2;
t1=new TraficRun1(TR);
t2=new TraficRun2(TR);
t1.start(); //启动南北方向交通灯线程
t2.start(); //启动东西方向交通灯线程
}
///////////////////////////////////////////////////////
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==start) //如果产生是start按纽的事件,那么开始运行
{
flag=1;
nowrun();
}
if(e.getSource()==set)
{
int n1=new Integer(flux.getText()).intValue();
fluxOfone=n1;
}
if(e.getSource()==stop)
{
System.exit(0);
}
}
}
//##############################################################################
class TraficRun1 extends Thread //南北方向交通灯线程
{
TraficRun t=new TraficRun();
public TraficRun1(TraficRun t)
{
this.t=t;
}
public void run()
{
boolean flag=true;
while(flag)
{
t.runS_n(); //运行南北方向的信号灯
}
}
}
//#############################################################################
class TraficRun2 extends Thread //东西方向交通灯线程
{
TraficRun t=new TraficRun();
public TraficRun2(TraficRun t)
{
this.t=t;
}
public void run()
{
boolean flag=true;
while(flag)
{
t.runE_w(); //运行东西方向的信号灯
}
}
}
//############################################################################
class WinClose extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{ //覆盖WindowAdapter类中同名方法,单击窗口关闭按钮时产生该事件
System.exit(0); //结束程序运行,关闭窗口
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -