模拟一个信号灯的软件。在JFrame的北面添加一个下拉列表,该下拉列表有“默认无信号”、“红灯”、“绿灯”和“黄灯”选项。在窗口的中心添加一个画布,当用户在下拉列表选择某项后,在画布上相应的信号灯。程序组成:编写 一个Canvas的子类SignalCanvas,负责画灯。编写 一个GUI类,实现选择画图。编写 一个程序执行入口测试该软件。
红绿灯类:
import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class Test2 extends JFrame implements ItemListener{
Choice box;
int num;
public Test2() throws HeadlessException {
super();
// TODO Auto-generated constructor stub
box=new Choice();
box.add("------无信号-----");
box.add("红灯");
box.add("绿灯");
box.add("黄灯");
add(box);
box.addItemListener(this);
setBounds(100, 100, 400, 400);
setLayout(new FlowLayout());
setVisible(true);
validate();
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
g.setColor(Color.white);
if(num==1)
{
g.setColor(Color.red);
}
if(num==2)
{
g.setColor(Color.green);
}
if(num==3)
{
g.setColor(Color.yellow);
}
g.drawOval(150, 150, 100, 100);
g.fillOval(150, 150, 100, 100);
}
@Override
public void itemStateChanged(ItemEvent arg0) {
// TODO Auto-generated method stub
num=box.getSelectedIndex();
repaint();
}
}
测试类:
public class Testmain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// ComputerFrame com=new ComputerFrame();
Test2 t2=new Test2();
}
}
ps:1.并未写SignalCanvas类,JFrame本身就具有paint()以及repaint()函数;
2.对JComboBox还未进行研究,所以用跟其功能相似的choice重量级组件,会逐步改进。