📄 traficlight_ex.java
字号:
package mapack;
import java.awt.*;
import java.awt.event.*;
////////////////////
public class TraficLight_Ex
{
public static void main(String args[])
{
TraficRun t=new TraficRun();
t.display(t); //通过display()方法把对象传给线程类来创建东西方向和南北方向的两个线程
} //按下"开始"按纽,开始运行两个方向的线程
}
//###################################################################################
class TraficLight extends Panel //交通信号灯类
{
int position=0; //位置
Color lightColor=Color.black; //灯的颜色
Color color=Color.black; //灯的默认颜色
long lastTime=0; //灯亮的延长时间
public TraficLight(int p,Color c,int lt)//构造函数
{
position=p;
lightColor=c;
lastTime=lt;
this.setBackground(Color.darkGray);
setSize(100,110);
}
public void paint(Graphics g)//画灯函数
{
int r=38;
int x=100/2-48;
int y=100/2-48;
g.setColor(color);
g.fillOval(x,y,r,r);
}
public void TurnOn() //把灯点亮函数
{
color=lightColor;
repaint();
}
public void TurnOff() //把灯熄灭函数
{
color=Color.black;
repaint();
}
public void setLinghtTime(long time) //设置灯时间函数
{
lastTime=time;
}
public long getLinghtTime() //获得灯的时间函数
{
return lastTime;
}
}
/////////////////////
class direcTarrow extends Panel //箭头指示类
{
int a;
Color lineColor; //箭头颜色
Color color;
public direcTarrow(int a,Color c)
{
this.a=a;
lineColor=c;
color=Color.BLUE;
this.setBackground(Color.BLUE);
}
public void paint(Graphics g)//画箭头函数
{
g.setColor(color);
int i=0;
if(a==1) //如果a为1,画南北方向直行箭头
{
for(i=0;i<10;i++)
{
g.drawLine(71+i,10,71+i,116);
g.drawLine(75,i,67,14);
g.drawLine(75,i,84,14);
g.drawLine(75,116+i,67,112);
g.drawLine(75,116+i,84,112);
}
}
if(a==2) //如果a为2,画东西方向直行箭头
{
for(i=0;i<10;i++)
{
g.drawLine(9,60+i,141,60+i);
g.drawLine(i,64,12,57);
g.drawLine(i,64,12,72);
g.drawLine(141+i,64,138,57);
g.drawLine(141+i,64,138,72);
}
}
if(a==3) //如果a为3,画南北方向左转箭头
{
for(i=0;i<10;i++)
{
g.drawLine(61+i,64,61+i,126);
g.drawLine(9,64+i,70,64+i);
g.drawLine(i,68,12,61);
g.drawLine(i,68,12,76);
g.drawLine(80+i,0,80+i,64);
g.drawLine(80,55+i,141,55+i);
g.drawLine(138,52,141+i,59);
g.drawLine(138,67,141+i,59);
}
}
if(a==4) //如果a为4,画东西方向左转箭头
{
for(i=0;i<10;i++)
{
g.drawLine(66+i,9,66+i,60);
g.drawLine(0,51+i,75,51+i);
g.drawLine(75+i,68,75+i,117);
g.drawLine(75,68+i,150,68+i);
g.drawLine(70,i,63,12);
g.drawLine(70,i,78,12);
g.drawLine(80,117+i,72,114);
g.drawLine(80,117+i,87,114);
}
}
}
public void turnOn(int a) //设置箭头为亮的
{
this.a=a;
color=lineColor;
repaint();
}
public void turnOff() //关掉箭头
{
color=Color.BLUE;
repaint();
}
}
//##################################################################################
class TraficRun extends Thread implements ActionListener //交通灯运行的线程类
{
boolean ewrunable; //线程互斥标志
long fluxOfone=100; //直行绿灯1秒所对应的车辆
int flag=1;
TraficRun TR;
public void TraficRun()
{
fluxOfone=100;
ewrunable=false; //初始值为false,即东西方向线程不运行
}
//定义所要用的组件
Frame f; //主要框架
direcTarrow dt;
TraficLight light1; //////////////////
TraficLight light2;
TraficLight light3;
TraficLight light4;
TraficLight light5;
TraficLight light6;
TraficLight light7;
TraficLight light8;
TraficLight light9;
TraficLight light10;
TraficLight light11;
TraficLight light12; //24盏交通灯
TraficLight light21;
TraficLight light22;
TraficLight light23;
TraficLight light24;
TraficLight light25;
TraficLight light26;
TraficLight light27;
TraficLight light28;
TraficLight light29;
TraficLight light210;
TraficLight light211;
TraficLight light212;/////////////////
Label lab1; //////////////////
Label lab2;
Label lab3;
Label lab4;
Label lab5;
Label lab6;
Label lab7;
Label lab8; //16个标签,标记交通灯方向
Label lab9;
Label lab10;
Label lab11;
Label lab12;
Label lab13;
Label lab14;
Label lab15;
Label lab16; ///////////////////
Panel p1;
Panel p2; //p1--p4面板,用来放4个方向的交通灯
Panel p3;
Panel p4;
Panel pkong1;
Panel pkong2;
Panel pkong3;
Panel pkong4;
Panel pkong5;
Panel kong1;////////////////////////////
Panel kong2;
Panel kong3;
Panel kong4;
Panel kong5;
Panel kong6;
Panel kong7;
Panel kong8;
Panel kong9;
Panel kong10;
Panel kong11;
Panel kong12;//24个空的面板,做图形界面时要用到
Panel kong13;
Panel kong14;
Panel kong15;
Panel kong16;
Panel kong17;
Panel kong18;
Panel kong19;
Panel kong20;
Panel kong21;
Panel kong22;
Panel kong23;
Panel kong24;////////////////////////
/////////////
Label fortf1,fortf2; //提示车流量的标签
TextField tf1,tf2; //显示车流量的文本行
//////////////////////////
Label CLASS; //显示班级,姓名,学号的标签
////////////////
Label e;
Label w; //标示东西南北的4个标签
Label s;
Label n;
///////////
Label nowLightTime;
Label SNdreGreen; //提示各个绿灯信号灯时间的标签
Label SNleftGreen;
Label EWdreGreen;
Label EWleftGreen;
/////////////
TextField SNdre; //显示各绿灯信号灯时间的文本行
TextField SNleft;
TextField EWdre;
TextField EWleft;
//////////////
Panel mainp; //主面板
///////////
Button set;
Button start;
Button stop;
///////
Label forflux1;
Label forflux2;
TextField flux;
public void display(TraficRun TR) //设计信号灯示意图界面
{
this.TR=TR;
fluxOfone=100;
f=new Frame("交通灯系统"); //主框架
f.setSize(680,580); //设置框架的大小
f.setResizable(false); //框架不能改变大小
f.setBackground(Color.blue);
f.setLayout(new BorderLayout());
mainp=new Panel();
mainp.setSize(620,540);
mainp.setBackground(Color.BLUE);
mainp.setLayout(new GridLayout(3,3,16,16));
kong1=new Panel();
kong2=new Panel();
kong3=new Panel();
kong4=new Panel();
kong5=new Panel();
kong6=new Panel();
kong7=new Panel();
kong8=new Panel();
kong9=new Panel();
kong10=new Panel();
kong11=new Panel();
kong12=new Panel();
kong13=new Panel();
kong14=new Panel();
kong15=new Panel();
kong16=new Panel();
kong17=new Panel();
kong18=new Panel();
kong19=new Panel();
kong20=new Panel();
kong21=new Panel();
kong22=new Panel();
kong23=new Panel();
kong24=new Panel();
pkong1=new Panel();
pkong1.setBackground(Color.orange);
pkong2=new Panel();
pkong2.setBackground(Color.orange);
pkong3=new Panel();
pkong3.setLayout(new BorderLayout());
pkong4=new Panel();
pkong4.setBackground(Color.orange);
pkong5=new Panel();
pkong5.setBackground(Color.orange);
pkong5.setLayout(new BorderLayout());
p1=new Panel();
p1.setSize(280,280);
p1.setBackground(Color.cyan);
p1.setLayout(new GridLayout(4,4));
p2=new Panel();
p2.setSize(280,280);
p2.setBackground(Color.cyan);
p2.setLayout(new GridLayout(4,4));
p3=new Panel();
p3.setSize(280,280);
p3.setBackground(Color.cyan);
p3.setLayout(new GridLayout(4,4));
p4=new Panel();
p4.setSize(280,280);
p4.setBackground(Color.cyan);
p4.setLayout(new GridLayout(4,4));
dt=new direcTarrow(1,Color.CYAN); //提示当前通行的方向的箭头
light1=new TraficLight(1,Color.red,2);
light2=new TraficLight(1,Color.yellow,2);//修改灯2的时间就可以修改南北方向,左转黄灯亮的时间
light3=new TraficLight(1,Color.GREEN,3); //修改灯3的时间就可以修改南北方向,左转绿灯亮的时间
light4=new TraficLight(1,Color.red,2);
light5=new TraficLight(1,Color.yellow,3);
light6=new TraficLight(1,Color.GREEN,4); //修改灯6的时间就可以修改南北方向,直行绿灯亮的时间
light7=new TraficLight(1,Color.red,3); //修改灯5的时间就可以修改南北方向,直行黄灯亮的时间
light8=new TraficLight(1,Color.yellow,2);//修改灯8的时间就可以修改东西方向,左转黄灯亮的时间
light9=new TraficLight(1,Color.GREEN,3); //修改灯9的时间就可以修改东西方向,左转绿灯亮的时间
light10=new TraficLight(1,Color.red,2);
light11=new TraficLight(1,Color.yellow,3);//修改灯11的时间就可以修改东西方向,直行黄灯亮的时间
light12=new TraficLight(1,Color.GREEN,4);//修改灯12的时间就可以修改东西方向,直行绿灯亮的时间
light21=new TraficLight(1,Color.red,2);
light22=new TraficLight(1,Color.yellow,2);
light23=new TraficLight(1,Color.GREEN,2);
light24=new TraficLight(1,Color.red,2);
light25=new TraficLight(1,Color.yellow,2);
light26=new TraficLight(1,Color.GREEN,2);
light27=new TraficLight(1,Color.red,2);
light28=new TraficLight(1,Color.yellow,2);
light29=new TraficLight(1,Color.GREEN,2);
light210=new TraficLight(1,Color.red,2);
light211=new TraficLight(1,Color.yellow,2);
light212=new TraficLight(1,Color.GREEN,2);
lab1=new Label("南往北");
lab2=new Label("直行灯");
lab3=new Label("北往南");
lab4=new Label("直行灯");
lab5=new Label("南往北");
lab6=new Label("左转灯");
lab7=new Label("北往南");
lab8=new Label("左转灯");
lab9=new Label("东往西");
lab10=new Label("直行灯");
lab11=new Label("西往东");
lab12=new Label("直行灯");
lab13=new Label("东往西");
lab14=new Label("左转灯");
lab15=new Label("西往东");
lab16=new Label("左转灯");
fortf1=new Label("南北方向车流量");
fortf2=new Label("东西方向车流量");
CLASS= new Label("计算机021、黄世汉、02095111",1);
e=new Label("东");
w=new Label("西");
s=new Label("南",1);
n=new Label("北",1);
nowLightTime=new Label(" ");
SNdreGreen=new Label("南北方向直行绿灯时间");
SNleftGreen=new Label("南北方向左转绿灯时间");
EWdreGreen=new Label("东西方向直行绿灯时间");
EWleftGreen=new Label("东西方向左转绿灯时间");
SNdre=new TextField(4);
SNdre.setEditable(false);
SNleft=new TextField(4);
SNleft.setEditable(false);
EWdre=new TextField(4);
EWdre.setEditable(false);
EWleft=new TextField(4);
EWleft.setEditable(false);
tf1=new TextField(9);
tf1.setEditable(false);
tf2=new TextField(9);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -