⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 traficlight_ex.java

📁 java 编程
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		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 + -