*/
if (xhd == \东西灯\)
a.qh(100, 100, \红\, \绿\, g); /**
* 如果为南北方向上的信号灯,调用自定义的方法,设置信号灯的颜色以及设置信号灯的坐标,并将信号灯在面板上绘出来 */
if (xhd == \南北灯\)
a.qh(100, 100, \绿\, \红\, g); /**
* 如果为黄灯,调用自定义的方法,设置信号灯的颜色以及设置信号灯的坐标,并将信号灯在面板上绘出来 */
if (xhd == \黄灯\)
a.qh(100, 100, \黄\, \黄\, g); } /**
*控制信号灯的颜色,同时将每个方向上的信号灯设为三个,且设置信号灯的坐标,在面板上绘出来 * @param
6
*/
public void qh(int x1, int y1, String cl1, String cl2, Graphics g) {
x = x1; y = y1; color1 = cl1; color2 = cl2;
for (int i = 0; i < 3; i++) { /**
* 设置方向 上信号灯的颜色 */
if (color1 == \黄\)
g.setColor(Color.yellow);
if (color1 == \红\) g.setColor(Color.red);
if (color1 == \绿\)
g.setColor(Color.green); /**
7
* 通过属性g调用GraphicsKh的fillOval()方法,将信号灯在面板上绘制出来 * 南北方法的信号灯 */
g.fillOval(x + i * 15, y, 15, 15);
g.fillOval(x + 55 + i * 15, y + 85, 15, 15);
/**
* 设置东西方向上信号灯的颜色 */
if (color2 == \黄\)
g.setColor(Color.yellow);
if (color2 == \红\) g.setColor(Color.red);
if (color2 == \绿\)
g.setColor(Color.green); /**
* 东西方向的信号灯,并调用Graphic的fillOval方法,设置东西方向上信号灯的坐标
8
*/
g.fillOval(x + 85, y + i * 15, 15, 15);
g.fillOval(x, y + 55 + i * 15, 15, 15); }
}
对于各个方向上信号灯线程的控制,我们定义了两个成员内部类来实现,这两个类继承了Thread类作为信号灯的线程,对信号灯来进行控制,这样方便进行调用,不用在不同的块中定义更多的类,而且定义的属性也有相应的权限,代码如下:
/** * *
*定义一个类Direct,继承Thread,作为南北方向上信号灯 *的线程,用来控制南北方法的信号灯 */
class Direct extends Thread {
private Jerry a1;//定义一个Jerry的属性,用来控制南北方向上信号灯
9
public Direct(Jerry a) { a1 = a; }
public void run() {
for (int j = 0; j < 100 + j; j++)
synchronized (a1) {//调用synchronized同步监视器将当前线程锁住,使得在当前进程运行时,不允许其他线程来访问
for (int i = 0; i < 100; i++) { x1 += 5;//x1坐标的变化,使得\南北行\在面板上运动
repaint();//x1每加一次,就重绘一次 if (x1 == 285)//当x1=285,就将x1重置为0,
x1 = 0;
try {
Thread.sleep(50);//重置为0后,将
10