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);
}
}
java通讯课程实验 - 简单的售票厅
最新推荐文章于 2024-05-25 10:57:37 发布