java通讯课程实验 - 简单的售票厅

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.text.*;
public class Frame extends JFrame {
	JTextField text_word[],texts[],text=new JTextField(8);
	JButton buttons[];
	int sleeptime;
	Font font =new Font("宋体",1,18);
	public Frame(String[] Texts)
	{
		super("售票厅");
		this.setBounds(300,300,540,300);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.getContentPane().add(new Safe(Texts));

		this.setVisible(true);
	}

	
	public class Safe  extends JPanel implements ActionListener,Runnable{
		
		JTextField text_word[],texts[],text=new JTextField(8),surtext=new JTextField(8);
		JButton buttons[],buttons2[];
		int sleeptime;
		Font font =new Font("宋体",1,18);
		
		private int num;
		boolean flag=true;
		Thread sell1,sell2,sell3;
		
		public Safe(String Texts[]) {
			this.setLayout(new GridLayout(Texts.length*2+1,1));
			this.text_word = new JTextField[Texts.length];
			JPanel cmdpanel[] = new JPanel[Texts.length];
			
			this.texts = new JTextField[Texts.length];
			for(int i=0;i<Texts.length;i++)
			{
				
				this.text_word[i] = new JTextField(Texts[i]);
				this.text_word[i].setFont(font);
				text_word[i].setHorizontalAlignment(JTextField.CENTER);
				
				this.texts[i] = new JTextField("关闭中",8);
				this.texts[i].setEditable(false);
			}
			this.buttons = new JButton[Texts.length+1];
			this.buttons2 = new JButton[Texts.length];
			for(int i=0;i<Texts.length;i++)
			{
			
				this.buttons2[i] = new JButton("开启");
				this.buttons2[i].addActionListener(this);
				this.buttons2[i].setEnabled(false);
				this.buttons[i] = new JButton("关闭");
				this.buttons[i].addActionListener(this);
				this.buttons[i].setEnabled(false);
			}
			this.buttons[Texts.length] =new JButton("启动"); 
			this.buttons[Texts.length].addActionListener(this);
			
			for(int i=0;i<Texts.length;i++) {
				this.add(text_word[i]);
				cmdpanel[i]=new JPanel();
				this.add(cmdpanel[i]);
				cmdpanel[i].add(new JLabel("窗体情况"));
				cmdpanel[i].add(texts[i]);
				
				cmdpanel[i].add(this.buttons[i]);
				cmdpanel[i].add(this.buttons2[i]);
				
				
			}
			JPanel cmd = new JPanel();
			JLabel label= new JLabel("发售票数") ;	
			text.addActionListener(this);
			this.add(cmd);
			cmd.add(label);
			cmd.add(text);
			cmd.add(new JLabel("剩余票数"));
			cmd.add(surtext);
			cmd.add(buttons[Texts.length]);
			label.setHorizontalAlignment(SwingConstants.CENTER);
			sell1= new Thread(this,"窗口1");
			sell2 =new Thread(this,"窗口2");
			sell3 =new Thread(this,"窗口3");
		}

		public void run() {
			while(flag)
			{
				
				try {
					sale();
					Thread.sleep((int)(Math.random()*4000+1000));
					
				}catch(InterruptedException e) {
					break;
				}
			}
			
		}
		//互斥方法
		private synchronized void sale() {
			
			if(num > 0) {
				Date date= new Date();
				SimpleDateFormat ft = new SimpleDateFormat ("hh:mm:ss");
				try {
	                Thread.sleep((int)(Math.random()*2000+1000));
	                if(Thread.currentThread().getName()=="窗口1")
					{
					    this.text_word[0].setText(Thread.currentThread().getName()+"卖出了第"+num--+"张票"+ft.format(date));
					    this.surtext.setText(""+this.num);
					}
				else if(Thread.currentThread().getName()=="窗口2")
					{
					    this.text_word[1].setText(Thread.currentThread().getName()+"卖出了第"+num--+"张票"+ft.format(date));
					    this.surtext.setText(""+this.num);
					}
				else if(Thread.currentThread().getName()=="窗口3")
					{
					    this.text_word[2].setText(Thread.currentThread().getName()+"卖出了第"+num--+"张票"+ft.format(date));
					    this.surtext.setText(""+this.num);
					}
	               } catch(InterruptedException e) {
	            	   
	                }
				
				
			}else {
				for(int i=0;i<3;i++)
					this.text_word[i].setText("票卖完了");
				
				flag = false;
				return;
			}
		}
		public void actionPerformed(ActionEvent event) {
			if(event.getSource()==this.text)
			{
				try
				{
					this.num = Integer.parseInt(this.text.getText());
					this.surtext.setText(this.text.getText());
				}
				catch(NumberFormatException ex)
				{
					JOptionPane.showMessageDialog(this, "\""+this.text.getText()+"\"不能转换成整数,重新输入售票数!");
				}
			}
			
			
			if(event.getSource()==this.buttons[3])
			{
				for(int i=0;i<3;i++)
				{
					this.texts[i].setText("售卖中");
					this.buttons[i].setEnabled(true);
				}
				if(num!=0 )
				{
				   if( this.sell1.getState() != Thread.State.NEW)
				   { 
				       
			           sell1= new Thread(this,"窗口1");
				   }
				   if(this.sell2.getState() != Thread.State.NEW)
				   {
					   
				       sell2 =new Thread(this,"窗口2");
				   }
				   if(this.sell3.getState() != Thread.State.NEW)
				   {
					   
					   sell3 =new Thread(this,"窗口3");
				   }
				}
				sell1.start();
				sell2.start();
				sell3.start();
				
			}
			if(event.getSource() ==this.buttons[0])
			{
				if(sell1.isAlive())
				{
				   sell1.interrupt();
				   this.texts[0].setText("关闭中");
				   this.buttons[0].setEnabled(false);
				   this.buttons2[0].setEnabled(true);
				}
				
			}
			if(event.getSource() ==this.buttons[1])
			{
				if(sell2.isAlive())
				{
					sell2.interrupt();
					this.texts[1].setText("关闭中");
					this.buttons[1].setEnabled(false);
					this.buttons2[1].setEnabled(true);
				}
				
				
			}
			if(event.getSource() ==this.buttons[2])
			{
				if(sell3.isAlive())
				{
				    sell3.interrupt();
				    this.texts[2].setText("关闭中");
				    this.buttons[2].setEnabled(false);
				    this.buttons2[2].setEnabled(true);
				}
				
			}
			
			if(event.getSource() ==this.buttons2[0])
			{
				if( this.sell1.getState() != Thread.State.NEW)
				   { 
				       
			           sell1= new Thread(this,"窗口1");
			           sell1.start();
			           this.buttons[0].setEnabled(true);
			           this.texts[0].setText("售票中");
					   this.buttons2[0].setEnabled(false);
			          
				   }
				
			}
			if(event.getSource() ==this.buttons2[1])
			{
				if(this.sell2.getState() != Thread.State.NEW)
				   {
					   
				       sell2 =new Thread(this,"窗口2");
				       sell2.start();
				       this.texts[1].setText("售票中");
				       this.buttons[1].setEnabled(true);
					   this.buttons2[1].setEnabled(false);
				   }
				
				
			}
			if(event.getSource() ==this.buttons2[2])
			{
				if(this.sell3.getState() != Thread.State.NEW)
				   {
					   
				       sell3 =new Thread(this,"窗口3");
				       sell3.start();
				       this.texts[2].setText("售票中");
				       this.buttons[2].setEnabled(true);
					   this.buttons2[2].setEnabled(false);
				   }
				
			}
		}
	}
	public static void main(String[] args) {
		String Texts[] = {"窗口1","窗口2","窗口3"};
		new Frame(Texts);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值