⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 photocenter.java

📁 模拟电话系统
💻 JAVA
字号:
/**
 * @(#)PhotoCenter.java
 *
 * Sample Applet application
 *
 * @author 
 * @version 1.00 09/03/23
 */
 
import java.awt.*;
import java.applet.*;
import java.lang.*;
import java.io.*;
import java.util.Random;
import java.applet.AudioClip;
import java.net.*;

//建立一个电话模拟机窗口

public class PhotoCenter extends Applet {
	MyThread thread=new MyThread();
	Font f=new Font("宋体",1,20);
	MyButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bx,bf; //用自己的类创建电话号码按钮
	Button dial,baocun,save,call;
	Panel pu,pm,pd,p1,p2,p3,p4,p5,p6;
	TextField tf,tf1;
	Label notepad,phonepad;
	TextArea ta;                                     //作为记事本的文本区域
	List list;                                        //作为电话不得列表框
	Checkbox mt,cb,gd,jx;
	CheckboxGroup cbg;
	String str="",taStr,text="",dialdigital,dialstate;
	AudioClip
	bohaoyin,bo1,bo2,bo3,bo4,bo5,bo6,bo7,bo8,bo9,bo0,bof,box,busy,seagull,mti,hello;
	int i,j,mtnum,re;
	boolean bh=false,ld=false;
	
	//对窗口进行初始化	
	public void init() {
	//导入声音文件
	    bo1=getAudioClip(getCodeBase(),"Audio/1.au");
	    bo2=getAudioClip(getCodeBase(),"Audio/2.au");
	    bo3=getAudioClip(getCodeBase(),"Audio/3.au");
	    bo4=getAudioClip(getCodeBase(),"Audio/4.au");
	    bo5=getAudioClip(getCodeBase(),"Audio/5.au");
	    bo6=getAudioClip(getCodeBase(),"Audio/6.au");
	    bo7=getAudioClip(getCodeBase(),"Audio/7.au");
	    bo8=getAudioClip(getCodeBase(),"Audio/8.au");
	    bo9=getAudioClip(getCodeBase(),"Audio/9.au");
	    bo0=getAudioClip(getCodeBase(),"Audio/0.au");
	    box=getAudioClip(getCodeBase(),"Audio/0.au");
	    bof=getAudioClip(getCodeBase(),"Audio/0.au");
	    bohaoyin=getAudioClip(getCodeBase(),"Audio/ling.au");
	    busy=getAudioClip(getCodeBase(),"Audio/busy.au");
	    seagull=getAudioClip(getCodeBase(),"Audio/drip.au");
	    mti=getAudioClip(getCodeBase(),"Audio/mti.au");
	    hello=getAudioClip(getCodeBase(),"Audio/hello.au");
	    
    notepad=new Label("记事本");
    tf=new TextField(8);
    tf1=new TextField(8);
    phonepad=new Label("电话簿");
    pu=new Panel();
    pu.setLayout(new GridLayout(1,4));
    pu.add(notepad);pu.add(tf);pu.add(tf1);pu.add(phonepad);
    pu.setFont(f);
    //创建一个文本域作为记事本
    ta=new TextArea("",10,15);
    p1=new Panel();
    p1.add(ta);
    //用自己类创建电话号码按钮
    b1=new MyButton("1");b2=new MyButton("2");b3=new MyButton("3");b4=new MyButton("4");
    b5=new MyButton("5");b6=new MyButton("6");b7=new MyButton("7");b8=new MyButton("8");
    b9=new MyButton("9");b0=new MyButton("0");bx=new MyButton("*");bf=new MyButton("#");
    p2=new Panel();
    p2.setLayout(new GridLayout(4,3));
    p2.setFont(f);
    p2.add(b1);p2.add(b2);p2.add(b3);p2.add(b4);p2.add(b5);p2.add(b6);p2.add(b7);
    p2.add(b8);p2.add(b9);p2.add(b1);p2.add(b0);p2.add(bx);p2.add(bf);
    //创建列表框作为电话簿
    list=new List(11,false);
    p3=new Panel();
    p3.add(list);
    //创建面板,设置面板布局
    pm=new Panel();
    pm.setLayout(new GridLayout(1,3,20,0));
    pm.add(p1);pm.add(p2); pm.add(p3);
    dial=new Button("拨号");               //创建拨号按钮
    call=new Button("来电");
    
    p6=new Panel();
    p6.setLayout(new GridLayout(2,1));
    p6.add(dial);p6.add(call);
    
    //创建"免提","重播","挂断","继续"复选框
    cbg=new CheckboxGroup();
    mt=new Checkbox("免提",cbg,true);cb=new Checkbox("重播",cbg,false);
    gd=new Checkbox("挂断",cbg,false);jx=new Checkbox("继续",cbg,false);
    cb.setEnabled(false);
    jx.setEnabled(false);
    p4=new Panel();
    p4.setLayout(new GridLayout(2,2));
    p4.add(mt);p4.add(cb);p4.add(gd);p4.add(jx);
    
    save=new Button("存储");               //用于保存电话号码到电话簿
    baocun=new Button("保存");             //用于将信心保存到外部文件中
        
    p5=new Panel();
    p5.setLayout(new GridLayout(2,1));
    p5.add(save);p5.add(baocun);
    
    pd=new Panel();
    pd.add(new Label(""));
    pd.add(p6);
    pd.add(new Label(""));
    pd.add(p4);
    pd.add(new Label(""));
    pd.add(p5);pd.setFont(f);              //设置面板内字体格式
    
    add(pu);add(pm);add(pd);      //add(pb)
    readto();
    dial.setBackground(new Color(245,197,143));
    call.setBackground(new Color(245,197,143));
    baocun.setBackground(new Color(245,197,143));
    save.setBackground(new Color(245,197,143));
    
	}
	
	//响应事件方法
	public boolean action(Event evt,Object obj)
	{
	    call.setEnabled(true);
	    if(evt.target instanceof Button)
	    {   //单击电话号码是将所拨的电话号码输入文本框,同时发出相应的拨号声
	        if("1".equals(obj))
	        {str="1";tf.setText(tf.getText()+str);dial("1");call.setEnabled(false);}
	        if("2".equals(obj))
	        {str="2";tf.setText(tf.getText()+str);dial("2");call.setEnabled(false);}
	        if("3".equals(obj))
	        {str="3";tf.setText(tf.getText()+str);dial("3");call.setEnabled(false);}
	        if("4".equals(obj))
	        {str="4";tf.setText(tf.getText()+str);dial("4");call.setEnabled(false);}
	        if("5".equals(obj))
	        {str="5";tf.setText(tf.getText()+str);dial("5");call.setEnabled(false);}
	        if("6".equals(obj))
	        {str="6";tf.setText(tf.getText()+str);dial("6");call.setEnabled(false);}
	        if("7".equals(obj))
	        {str="7";tf.setText(tf.getText()+str);dial("7");call.setEnabled(false);}
	        if("8".equals(obj))
	        {str="8";tf.setText(tf.getText()+str);dial("8");call.setEnabled(false);}
	        if("9".equals(obj))
	        {str="9";tf.setText(tf.getText()+str);dial("9");call.setEnabled(false);}
	        if("0".equals(obj))
	        {str="0";tf.setText(tf.getText()+str);dial("0");call.setEnabled(false);}
	        if("*".equals(obj))
	        {str="*";tf.setText(tf.getText()+str);dial("*");call.setEnabled(false);}
	        if("#".equals(obj))
	        {str="#";tf.setText(tf.getText()+str);dial("#");call.setEnabled(false);}
	        //单击拨号按钮进行拨号
	        if("拨号".equals(obj)&& (!(bh))){bohao();}
	        //单击存储按钮时,如果电话簿内没有相同号码,则将文本框内的电话号码存入电话簿
	        if("存储".equals(obj)){seagull.play();saveto();if(!(tf1.getText().equals("通话中")||tf1.getText().equals("已挂机")))
	             call.setEnabled(false);
	        }
	        //单击保存按钮时将记事本和电话簿中的信息存到外部文件
	        if("保存".equals(obj)){writeto();}
	        //单击来电按钮时进行来电模拟
	        if("来电".equals(obj)){if(tf1.getText().equals("通话中"))jx.setEnabled(true);
	        cb.setEnabled(false);thread.stop();hello.stop();
	        bohaoyin.play();laidian();}
	    }
	    else if(evt.target instanceof List){tf.setText(list.getSelectedItem());}
	    else{
	        //选中重播复选框时中断拨号操作,然后重新拨号
	        if(cbg.getSelectedCheckbox().equals(cb))
	        {thread.stop();hello.stop();busy.stop();bohaoyin.stop();}
	        //选中继续,继续通话
	        if(cbg.getSelectedCheckbox().equals(jx)){
	        	thread.stop();bh=false;call.setEnabled(false);
	        	if(re==2){             //若之前状态为通话中,则恢复原状态
	        	    hello.loop();tf.setText(dialdigital);tf1.setText(dialstate);
	        	    call.setEnabled(true);	
	        	}
	        }
	        //选中免提复选框时播放免提音
	        if(cbg.getSelectedCheckbox().equals(mt)){mti.play();
	        if(tf1.getText().equals("等待")||tf1.getText().equals("占线")||tf1.getText().equals("来电"))
	            call.setEnabled(false);}
	        //选中挂断复选框时取消本次拨号操作
	        if(cbg.getSelectedCheckbox().equals(gd))
	        {
	            thread.stop();hello.stop();busy.stop();bohaoyin.stop();
	            re=3;dial.setEnabled(true);call.setEnabled(true);jx.setEnabled(false);
	            bh=false;ld=false;
	            //tf.setText("")
	            tf1.setText("已挂机");
	            cb.setEnabled(true);	
	        }	
	    }
	    return true;	
	}
	
	//创建一个方法,用于在将文本框电话号码存入电话簿前
	//检查电话簿中是否已经存在相同的号码
	public boolean checkTf()
	{
		boolean result=false;
		for(int i=0;i<list.countItems();i++)
		{
			if(tf.getText().equals(list.getItem(i))){result=true;return result;}}
			return result;
		}
		public void saveto()
		{
			if(!((checkTf())||(tf.getText().equals(""))))
		    {list.addItem(tf.getText());}		    
		}
		
		public void laidian()
		{
			call.setEnabled(false);
			dial.setEnabled(false);
			ld=true;
			Random randGen=new Random();
			int calldata=Math.abs(randGen.nextInt())%6;
			String  s1[]={"13700464870","13700412953","13700420053","13700332587","13788905678","13790766468"};
			if(!(tf.getText().equals("")))
				dialdigital=tf.getText();
				dialstate=tf1.getText();
				tf.setText(s1[calldata]);
				tf1.setText("来电");
		}
		
		//创建点击拨号按钮时进行响应的方法
		public void bohao()
		{
			//如果文本框中没有电话号码,提示输入
			dial.setEnabled(false);call.setEnabled(false);
			if(tf.getText().equals("")){tf1.setText("请输入号码!");dial.setEnabled(true);}
			else{
				bh=true;dial(tf.getText());
				//用随机数来决定是播放拨号音还是占线音
				Random rd=new Random();
				re=Math.abs(rd.nextInt())%3;
				switch(re)
				{
					case(0):tf1.setText("等待");cb.setEnabled(true);bohaoyin.loop();break;
					case(1):tf1.setText("占线");cb.setEnabled(true);bohaoyin.loop();break;
					case(2):call.setEnabled(true);cb.setEnabled(false);tf1.setText("通话中");hello.loop();break;
				}
			}
		}
		//以下方法用于进行点击电话号码按钮或是拨号按钮式进行拨号模拟
		public void dial(String text)
		{
			MyThread thread=new MyThread();
			//获取文档中的电话号码
			for(i=0;i<text.length();i++)
			{
				char digit=text.charAt(i);
				switch(digit)   //更具文本框中的电话号码播放相应拨号声,同时先是动态效果
				{
					case('0'):b0.setBackground(new Color(255,230,255));
					          bo0.play();thread.run(150);
					//利用线程产生延时效果,隔开两种颜色的显示时间,以此来产生拨号动感效果
					          b0.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('1'):b1.setBackground(new Color(255,230,255));
					          bo1.play();thread.run(150);					
				              b1.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('2'):b2.setBackground(new Color(255,230,255));
					          bo2.play();thread.run(150);					
					          b2.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('3'):b3.setBackground(new Color(255,230,255));
					          bo3.play();thread.run(150);					
					          b3.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('4'):b4.setBackground(new Color(255,230,255));
					          bo4.play();thread.run(150);					
					          b4.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('5'):b5.setBackground(new Color(255,230,255));
					          bo5.play();thread.run(150);					
					          b5.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('6'):b6.setBackground(new Color(255,230,255));
					          bo6.play();thread.run(150);					
					          b6.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('7'):b7.setBackground(new Color(255,230,255));
					          bo7.play();thread.run(150);					
					          b7.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('8'):b8.setBackground(new Color(255,230,255));
					          bo8.play();thread.run(150);					
					          b8.setBackground(new Color(197,202,4));
				 	          thread.run(150);break;
					case('9'):b9.setBackground(new Color(255,230,255));
					          bo9.play();thread.run(150);					
					          b9.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('*'):bx.setBackground(new Color(255,230,255));
					          box.play();thread.run(150);					
					          bx.setBackground(new Color(197,202,4));
					          thread.run(150);break;
					case('#'):bf.setBackground(new Color(255,230,255));
					          bof.play();thread.run(150);					
					          bf.setBackground(new Color(197,202,4));
					          thread.run(150);break;
				}
			}
		}
		//将外部文件信息带入电话簿和记事本
		public void readto()
		{
			text="";
			ta.setText("");
			list.clear();
			text=getCodeBase().toString().substring(6);
			File notebook =new File(text+"记事本.txt");File phonebook=new File(text+"电话簿.txt");
			try   // 创建文件
			{
				BufferedReader br1=new BufferedReader(new FileReader(notebook));
				BufferedReader br2=new BufferedReader(new FileReader(phonebook));
				//将文件内容导入记事本
				while(br1.ready()){text=br1.readLine();ta.append(text+"r\n");}
				br1.close();
				//将文件内容导入电话簿
				while(br2.ready()){text=br1.readLine();list.addItem(text);}
				br2.close();
			}
			//找不到文件的的例外处理
			catch(FileNotFoundException fnf)
			{
				ta.append("file not found exception!/n");
				list.addItem("file not found exception!");
			}
			catch(IOException ioe)   //读写文件出错的意外处理
			{
				ta.append("io exception!");
				list.addItem("io exception!");
			}
			}
			//将记事本和电话簿中信息导出到外部文件
			public void writeto()
			{
				text=getCodeBase().toString().substring(6);
				File notebook=new File(text+"记事本.txt");
				File phonebook=new File(text+"电话簿.txt");
				
				try
				{
					BufferedWriter bw1=new BufferedWriter(new FileWriter(notebook));
					BufferedWriter bw2=new BufferedWriter(new FileWriter(phonebook));
					bw1.write(ta.getText());   //将记事本内容写入文件
					bw1.flush();
					bw2.close();
					//将电话簿内容写入文件
					for(int i=0;i<(list.countItems());i++)
					bw2.write(list.getItem(i)+"\r\n");
					bw2.flush();
					bw2.close();
				}
				catch(Exception e)
				{
					System.out.println("there are some error!");
				}
			}
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -