题目描述:

编写一个窗体应用程序模拟交通信号灯。


在窗口北边建立一个下拉列表,该下拉列表有“红灯”,“黄灯”,“绿灯”三个选项,在窗口的中心建立一块画布,当用户在下拉列表中选择某项时,画布上显示对应的信号灯。

画布类:


package light;

import java.awt.*;
public class SignalPanel extends Panel {
int x,y,r;
Color c2;
SignalPanel()
{
setBackground(Color.white);
}
public void get1(int x)
{
this.x=x;
}
public void get2(int y)
{
this.y=y;
}
public void get3(int r)
{
this.r=r;
}
public void paint(Graphics g)
{
g.setColor(c2);
g.fillOval(x, y, 2*r, 2*r);
}
public void update(Graphics g)
{
g.clearRect(x, y, 2*r, 2*r);
paint(g);
}
}

窗口实现:


package light;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class SignalFrame extends JFrame implements ItemListener {
SignalPanel w;
JComboBox choice;
String item0 = "默认关闭", itemRed = "红灯", itemYellow = "黄灯", itemGreen = "绿灯";
SignalFrame() {
w = new SignalPanel();
Panel p1 = new Panel();
choice = new JComboBox();
choice.addItem(item0);
choice.addItem(itemRed);
choice.addItem(itemYellow);
choice.addItem(itemGreen);
p1.add(choice);
add(w, BorderLayout.CENTER);
add(p1, BorderLayout.NORTH);
choice.addItemListener(this);
setBounds(350, 350, 550, 550);
setVisible(true);
validate();
}

public void itemStateChanged(ItemEvent arg0) {

int d = choice.getSelectedIndex();
w.get1(100);
w.get2(100);
w.get3(100);
if (d == 1) {
w.c2 = Color.red;
w.repaint();
}
if (d == 2) {
w.c2 = Color.yellow;
w.repaint();
}
if (d == 3) {
w.c2 = Color.green;
w.repaint();
}
}
}


测试类:


package light;

public class Text {
public static void main(String[] args)
{
new SignalFrame();
}
}


运行结果:

模拟交通信号灯(Java)_下拉列表


模拟交通信号灯(Java)_应用程序_02


模拟交通信号灯(Java)_应用程序_03