1. 程式人生 > >JAVA--第十一週實驗--模擬一個訊號燈的軟體

JAVA--第十一週實驗--模擬一個訊號燈的軟體

Test類

/* (程式頭部註釋開始)   
 * 程式的版權和版本宣告部分   
 * Copyright (c) 2011, 煙臺大學計算機學院學生    
 * All rights reserved.   
 * 檔名稱: 模擬一個訊號燈的軟體
 * 作 者: 雷恆鑫    
 * 完成日期: 2012 年 11 月 09 日   
 * 版 本 號: V1.0    
 * 對任務及求解方法的描述部分   
 * 輸入描述:在JFrame的北面新增一個下拉列表,該下拉列表有“預設無訊號”、“紅燈”、“綠燈”和“黃燈”選項。
 * 輸入描述:在視窗的中心新增一個畫布,當用戶在下拉列表選擇某項後,在畫布上相應的訊號燈。
 * 輸入描述:程式組成:編寫 一個Canvas的子類SignalCanvas,負責畫燈。
 * 輸入描述:編寫 一個GUI類,實現選擇畫圖。編寫 一個程式執行入口測試該軟體。  
 * 問題描述:   
 * 程式輸出:   
 * 程式頭部的註釋結束   
 */ 
package Draw;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Select_draw draw = new Select_draw();

	}

}

SignalCanvas類

package Draw;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;

public class SignalCanvas extends Canvas {
	int x, y, r, i;

	SignalCanvas(Color color) {
		setBackground(color);
	}

	public void setX() {
		this.x = (int) (Math.random() * 100) + 200;
	}

	public void setY() {
		this.y = (int) (Math.random() * 100) + 200;
	}

	public void setR() {
		this.r = (int) (Math.random() * 60) + 60;
	}

	public void paint(Graphics g) {
		if (this.i == 1) {
			g.setColor(Color.red);
			// update(Graphics g)
		} else if (this.i == 2) {
			System.out.println("畫出列印綠燈");
			g.setColor(Color.green);
		} else if (this.i == 3) {
			g.setColor(Color.yellow);
		} else {
			System.out.println("畫出列印白燈");
			g.setColor(Color.white);
		}

		g.fillOval(x, y, 2 * r, 2 * r);
	}

	public void setI(int i) {
		this.i = i;
	}

}


Select_draw類

package Draw;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;

public class Select_draw extends JFrame implements ItemListener{
	SignalCanvas myCanvas;
	Choice choice;
	Select_draw()
	{
//		Frame jf = new Frame("畫布");
		setTitle("訊號燈");
		choice = new Choice();
		
		choice.add("預設無訊號");
		choice.add("紅燈");
		choice.add("綠燈");
		choice.add("黃燈");
		add(choice,BorderLayout.NORTH);
		choice.addItemListener(this);
		myCanvas = new SignalCanvas(Color.white);
		add(myCanvas,BorderLayout.CENTER);
		setSize(600,600);
		setVisible(true);
	}
	
	public void itemStateChanged(ItemEvent e)
	{
		String name = choice.getSelectedItem();
		System.out.println(name);
		if(name == "紅燈")
		{
			//myCanvas = new SignalCanvas(Color.red);
			//System.out.println(e.getSource());
			myCanvas.setI(1);
			myCanvas.setX();
			myCanvas.setY();
			myCanvas.setR();
			//myCanvas.setX();
			myCanvas.repaint();
		}
		else if(name == "綠燈")
		{
			System.out.println("列印綠燈");
			//myCanvas = new SignalCanvas(Color.blue);
			myCanvas.setI(2);
			myCanvas.setX();
			myCanvas.setY();
			myCanvas.setR();
			myCanvas.repaint();
		}
		else if(name == "黃燈")
		{
			//myCanvas = new SignalCanvas(Color.yellow);
			myCanvas.setI(3);
			myCanvas.setX();
			myCanvas.setY();
			myCanvas.setR();
			myCanvas.repaint();
		}
		else
		{
			//myCanvas = new SignalCanvas(Color.white);
			myCanvas.setI(4);
			myCanvas.setX();
			myCanvas.setY();
			myCanvas.setR();
		     myCanvas.repaint();
		}
		//myCanvas = new SignalCanvas("");
	}

}


執行結果: