信号灯

来源:互联网 发布:乐视电视网络插口 编辑:程序博客网 时间:2024/04/28 01:33

/******
 * 模拟一个信号灯的软件。在JFrame的北面添加一个下拉列表,该下拉列表有“默认无信号”、“红灯”、“绿灯”和“黄灯”选项。
 * 在窗口的中心添加一个画布,
 * 当用户在下拉列表选择某项后,在画布上相应的信号灯。
 * 程序组成:编写 一个Canvas的子类SignalCanvas,负责画灯。编写 一个GUI类,实现选择画图。
 * 编写 一个程序执行入口测试该软件
 */
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.List;
import javax.swing.ComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;

public class TestSignal {
 
 public static void main(String[] args) {
  new SignalFrame().addWindowListener(new WindowAdapter()  //添加窗口关闭处理函数 
  { 
   public void windowClosing(WindowEvent e) 
   { 
    System.exit(0); 
   }});
  
 }
}


class SignalFrame extends Frame implements ItemListener {

    SignalCanvas sc;
 JComboBox list;
 Graphics g = this.getGraphics();       //获得当前窗口的图形上下文
 Color c = Color.red;

 public SignalFrame() {
  list=new JComboBox();
  sc = new  SignalCanvas();
  list.addItem("无信号");
  list.addItem("红灯");
  list.addItem("黄灯");
  list.addItem("绿灯");
  sc.setBackground(Color.pink);
  add(list,BorderLayout.NORTH);
  add(sc,BorderLayout.CENTER);
  list.addItemListener(this);
  setVisible(true);
  setBounds(100, 100, 450, 450);
  setTitle("信号灯");
  validate();
 }
 
 
 //@Override
 public void itemStateChanged(ItemEvent e) {
  // TODO Auto-generated method stub
  if(e.getItem() == list.getItemAt(0)){
   System.out.println("无信号");
   c = Color.orange;
   sc.update();
  }
  else if(e.getItem() == list.getItemAt(1)){
   System.out.println("红灯");
   c = Color.red;
   sc.update();
  }
  else if(e.getItem() == list.getItemAt(2)){
   System.out.println("黄灯");
   c = Color.yellow;
   sc.update();
  }
  else if(e.getItem() == list.getItemAt(3)){
            System.out.println("绿灯");
   c = Color.green;
   sc.update();
  }
 }

 class SignalCanvas extends Canvas {
  
  public SignalCanvas(){
      super();
   }
  
  public void paint(Graphics g){
   g.clearRect(0, 0, 450, 450);
   g.setColor(c);
   g.fillOval(120, 120, 100, 100);
   g.fillArc(120,120,90,90,0,360);
  }
  
  public void update(){
    repaint();   
  }
 }
 
}