trafficlight.java
来自「设计一个交通信号灯类: (1)变量:位置、颜色(红、黄、绿)、显示时间(秒)。」· Java 代码 · 共 460 行
JAVA
460 行
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.Date;
class roadpanel extends JPanel
{
private Image image;
JLabel n1,n2,n3,e1,e2,e3,s1,s2,s3,w1,w2,w3,l,per,d;
Font f1,f2,f3,f4;
JPanel pn,pe,ps,pw;
JTextField n,e,s,w,liu,time;
int num=0,r;
String np="";
public roadpanel()
{
image=Toolkit.getDefaultToolkit().getImage("road.jpg");
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(image,0);
try{
tracker.waitForID(0);
}
catch(InterruptedException e)
{
}
setLayout(null);
f1=new Font("ScansSerif",Font.BOLD,40);
f2=new Font("ScansSerif",Font.BOLD,35);
f3=new Font("ScansSerif",Font.BOLD,25);
f4=new Font("ScansSerif",Font.BOLD,15);
pn=new JPanel();
pe=new JPanel();
ps=new JPanel();
pw=new JPanel();
n=new JTextField("00",3);
e=new JTextField("00",3);
s=new JTextField("00",3);
w=new JTextField("00",3);
liu=new JTextField("",3);
time=new JTextField("0",3);
n1=new JLabel("←",SwingConstants.CENTER);
n2=new JLabel("↓",SwingConstants.CENTER);
n3=new JLabel("→",SwingConstants.CENTER);
e1=new JLabel("↑",SwingConstants.CENTER);
e2=new JLabel("←",SwingConstants.CENTER);
e3=new JLabel("↓",SwingConstants.CENTER);
s1=new JLabel("←",SwingConstants.CENTER);
s2=new JLabel("↑",SwingConstants.CENTER);
s3=new JLabel("→",SwingConstants.CENTER);
w1=new JLabel("↑",SwingConstants.CENTER);
w2=new JLabel("→",SwingConstants.CENTER);
w3=new JLabel("↓",SwingConstants.CENTER);
l=new JLabel("流量控制",SwingConstants.CENTER);
per=new JLabel("辆/小时",SwingConstants.CENTER);
d=new JLabel("日期时间",SwingConstants.CENTER);
add(pn);
add(pe);
add(ps);
add(pw);
add(l);
add(per);
add(liu);
add(time);
add(d);
l.setBounds(10,50,120,30);
liu.setBounds(130,50,100,30);
per.setBounds(230,50,120,30);
time.setBounds(100,100,100,30);
d.setBounds(530,550,300,20);
time.setVisible(false);
l.setFont(f3);
liu.setFont(f3);
d.setFont(f4);
liu.addKeyListener(new KeyAdapter()
{
public void keyReleased(KeyEvent evt)
{
int keyCode=evt.getKeyCode();
if(keyCode==KeyEvent.VK_ENTER)
{
try{
num=Integer.parseInt(liu.getText());
if(num>0)
num=num/60;
else
num=-1;
if(num<0)
{
JOptionPane.showMessageDialog(null,"请输入正数!","输入错误!",JOptionPane.ERROR_MESSAGE);
num=0;
liu.setText("");
}
else
{
if(num>50)
{num=50;}
else
if((num<=15)&(num>0))
num=15;
if(num==0)
num=10;
r=JOptionPane.showConfirmDialog(null,"下次执行的时间为"+num+"秒","是否确定?",JOptionPane.YES_NO_OPTION);
if(r!=0)
num=0;
}
}catch(NumberFormatException e)
{
JOptionPane.showMessageDialog(null,"只能输入数字,请重新输入!","输入错误!",JOptionPane.ERROR_MESSAGE);
num=0;
liu.setText("");
}
time.setText(np.valueOf(num));
}
}
});
per.setFont(f3);
pn.setBounds(290,155,184,45);
pn.setLayout(new GridLayout(1,4,1,0));
pn.setBackground(Color.darkGray);
pe.setBounds(520,216,40,164);
pe.setLayout(new GridLayout(4,1,0,1));
pe.setBackground(Color.darkGray);
ps.setBounds(321,398,184,45);
ps.setLayout(new GridLayout(1,4,1,0));
ps.setBackground(Color.darkGray);
pw.setBounds(239,223,40,164);
pw.setLayout(new GridLayout(4,1,0,1));
pw.setBackground(Color.darkGray);
pn.add(n1);
pn.add(n2);
pn.add(n3);
pn.add(n);
pe.add(e1);
pe.add(e2);
pe.add(e3);
pe.add(e);
ps.add(s);
ps.add(s1);
ps.add(s2);
ps.add(s3);
pw.add(w);
pw.add(w1);
pw.add(w2);
pw.add(w3);
n1.setFont(f1);
n1.setForeground(Color.darkGray);
n2.setFont(f1);
n2.setForeground(Color.darkGray);
n3.setFont(f1);
n3.setForeground(Color.darkGray);
e1.setFont(f2);
e1.setForeground(Color.darkGray);
e2.setFont(f2);
e2.setForeground(Color.darkGray);
e3.setFont(f2);
e3.setForeground(Color.darkGray);
s1.setFont(f1);
s1.setForeground(Color.darkGray);
s2.setFont(f1);
s2.setForeground(Color.darkGray);
s3.setFont(f1);
s3.setForeground(Color.darkGray);
w1.setFont(f2);
w1.setForeground(Color.darkGray);
w2.setFont(f2);
w2.setForeground(Color.darkGray);
w3.setFont(f2);
w3.setForeground(Color.darkGray);
n.setFont(f1);
n.setEditable(false);
n.setForeground(Color.red);
n.setBackground(Color.cyan);
e.setFont(f2);
e.setEditable(false);
e.setForeground(Color.red);
e.setBackground(Color.cyan);
s.setFont(f1);
s.setEditable(false);
s.setForeground(Color.red);
s.setBackground(Color.cyan);
w.setFont(f2);
w.setEditable(false);
w.setForeground(Color.red);
w.setBackground(Color.cyan);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image,0,0,this);
}
}
class ImageFrame extends JFrame
{
JMenuBar menubar;
JMenu editMenu,ed;
JMenuItem startitem,stopitem,exititem,editem;
public ImageFrame(final Thread ns,final Thread ew)
{
super("Control Trafficlight!");
setSize(808,659);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
ns.stop();
ew.stop();
System.exit(0);
}
});
menubar=new JMenuBar();
setJMenuBar(menubar);
editMenu=new JMenu("操作(O)");
ed=new JMenu("作者(M)");
startitem=new JMenuItem("继续(C)",'C');
stopitem=new JMenuItem("暂停(S)",'S');
exititem=new JMenuItem("退出(Q)",'Q');
editem=new JMenuItem("作者(M)",'M');
menubar.add(editMenu);
menubar.add(ed);
editMenu.add(startitem);
editMenu.add(stopitem);
editMenu.addSeparator();
editMenu.add(exititem);
ed.add(editem);
editMenu.setMnemonic('O');
ed.setMnemonic('M');
startitem.setMnemonic('C');
stopitem.setMnemonic('S');
exititem.setMnemonic('Q');
editem.setMnemonic('M');
startitem.setEnabled(false);
startitem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
startitem.setEnabled(false);
stopitem.setEnabled(true);
ew.resume();
ns.resume();
}
});
stopitem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
startitem.setEnabled(true);
stopitem.setEnabled(false);
ew.suspend();
ns.suspend();
}
});
exititem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
ns.stop();
ew.stop();
System.exit(0);
}
});
editem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
JOptionPane.showMessageDialog(null,"03级信工一班 彭浩宸 23号","作者",JOptionPane.INFORMATION_MESSAGE);
}
});
}
}
class Controlew implements Runnable
{
private int i=0,p,n,e,tp=0;
private String s="",w="",t="";
private roadpanel rpanel;
Date date;
boolean v=true;
public Controlew(roadpanel rp)
{
rpanel=rp;
}
public void run()
{
out:while(true)
{
synchronized(this)
{
if(!v)
{
try{
this.wait();
}catch(Exception e)
{e.printStackTrace();}
}
rpanel.n1.setForeground(Color.green);
rpanel.n2.setForeground(Color.red);
rpanel.n3.setForeground(Color.red);
rpanel.n.setForeground(Color.red);
rpanel.e1.setForeground(Color.green);
rpanel.e2.setForeground(Color.green);
rpanel.e3.setForeground(Color.green);
rpanel.e.setForeground(Color.green);
rpanel.s1.setForeground(Color.red);
rpanel.s2.setForeground(Color.red);
rpanel.s3.setForeground(Color.green);
rpanel.s.setForeground(Color.red);
rpanel.w1.setForeground(Color.green);
rpanel.w2.setForeground(Color.green);
rpanel.w3.setForeground(Color.green);
rpanel.w.setForeground(Color.green);
tp=Integer.parseInt(rpanel.time.getText());
if(tp!=0)
{n=tp+1;}
else
{n=11;}
t.indexOf(n);
rpanel.n.setText(t);
rpanel.s.setText(t);
rpanel.e.setText(t);
rpanel.w.setText(t);
while(true)
{
date=new Date();
rpanel.d.setText(date.toString());
try{
Thread.currentThread().sleep(1000);
}catch(Exception e){}
if(n==4)
{
rpanel.e2.setForeground(Color.yellow);
rpanel.e.setForeground(Color.yellow);
rpanel.e3.setForeground(Color.yellow);
rpanel.w2.setForeground(Color.yellow);
rpanel.w.setForeground(Color.yellow);
rpanel.w1.setForeground(Color.yellow);
}
else
if(n==1)
break;
n--;
if(n<10)
s="0"+s.valueOf(n);
else
s=s.valueOf(n);
rpanel.n.setText(s);
rpanel.s.setText(s);
rpanel.e.setText(s);
rpanel.w.setText(s);
}
v=false;
this.notify();
}
}
}
}
class Controlns implements Runnable
{
private int i=0,p,n,e,tp;
private String s="",w="",t="";
private roadpanel rpanel;
private Controlew ew;
Date date;
public Controlns(roadpanel rp,Controlew ew)
{
rpanel=rp;
this.ew=ew;
}
public void run()
{
out:while(true)
{
synchronized(ew)
{
if(ew.v)
{
try{
ew.wait();
}catch(Exception e)
{e.printStackTrace();}
}
rpanel.n1.setForeground(Color.green);
rpanel.n2.setForeground(Color.green);
rpanel.n3.setForeground(Color.green);
rpanel.n.setForeground(Color.green);
rpanel.e1.setForeground(Color.green);
rpanel.e2.setForeground(Color.red);
rpanel.e3.setForeground(Color.red);
rpanel.e.setForeground(Color.red);
rpanel.s1.setForeground(Color.green);
rpanel.s2.setForeground(Color.green);
rpanel.s3.setForeground(Color.green);
rpanel.s.setForeground(Color.green);
rpanel.w1.setForeground(Color.red);
rpanel.w2.setForeground(Color.red);
rpanel.w3.setForeground(Color.green);
rpanel.w.setForeground(Color.red);
tp=Integer.parseInt(rpanel.time.getText());
if(tp!=0)
{n=tp+1;}
else
{n=11;}
t.indexOf(n);
rpanel.n.setText(t);
rpanel.s.setText(t);
rpanel.e.setText(t);
rpanel.w.setText(t);
while(true)
{
date=new Date();
rpanel.d.setText(date.toString());
try{
Thread.currentThread().sleep(1000);
}catch(Exception e){}
if(n==4)
{
rpanel.n2.setForeground(Color.yellow);
rpanel.n.setForeground(Color.yellow);
rpanel.n3.setForeground(Color.yellow);
rpanel.s2.setForeground(Color.yellow);
rpanel.s.setForeground(Color.yellow);
rpanel.s1.setForeground(Color.yellow);
}
else
if(n==1)
break;
n--;
if(n<10)
s="0"+s.valueOf(n);
else
s=s.valueOf(n);
rpanel.n.setText(s);
rpanel.s.setText(s);
rpanel.e.setText(s);
rpanel.w.setText(s);
ew.v=true;
ew.notify();
}
}
}
}
}
public class trafficlight
{
public static void main(String[] args)
{
roadpanel rp=new roadpanel();
Controlew cew=new Controlew(rp);
Controlns cns=new Controlns(rp,cew);
final Thread ns=new Thread(cns);
final Thread ew=new Thread(cew);
JFrame frame=new ImageFrame(ns,ew);
frame.add(rp);
frame.setVisible(true);
ns.start();
ew.start();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?