java编程 多窗口卖票情况进度显示: (1)界面上显示三个的窗口的卖票情况, 每个窗口内容包括窗口名称(PYH_1_102_1、PYH_1_102_2、PYH_1_102_3), 该窗口分配的票数,已卖票数字(2)所有自口分配的票数总和等于103,每个窗口每次卖出的票数由随机数指定, (3)启动买票行为,由每次通过自动按钮一键完成,窗口的每次卖票间隔2秒 的程序
时间: 2024-02-18 22:59:03 浏览: 62
可以使用Java Swing编写一个GUI程序来实现这个多窗口卖票情况进度显示的功能。首先,需要创建一个主窗口,里面包含三个子窗口,每个子窗口都显示窗口名称、分配的票数和已卖票数字。可以使用JLabel和JTextField组件来实现这个功能。
下面是一个示例代码,可以作为参考:
```java
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class TicketSellingGUI extends JFrame {
private static final int TOTAL_TICKETS = 103;
private static final int WINDOW_WIDTH = 400;
private static final int WINDOW_HEIGHT = 300;
private static final int SELL_INTERVAL = 2000; // in milliseconds
private static final String[] WINDOW_NAMES = {"PYH_1_102_1", "PYH_1_102_2", "PYH_1_102_3"};
private static final int[] WINDOW_TICKETS = {30, 40, 33};
private JLabel[] windowLabels;
private JTextField[] soldTicketFields;
private int[] soldTickets;
public TicketSellingGUI() {
super("Ticket Selling Status");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
this.setLayout(new GridLayout(3, 2));
windowLabels = new JLabel[3];
soldTicketFields = new JTextField[3];
soldTickets = new int[3];
for (int i = 0; i < 3; i++) {
windowLabels[i] = new JLabel(WINDOW_NAMES[i] + " (" + WINDOW_TICKETS[i] + " tickets)");
soldTicketFields[i] = new JTextField("0", 5);
soldTicketFields[i].setEditable(false);
this.add(windowLabels[i]);
this.add(soldTicketFields[i]);
}
JButton sellButton = new JButton("Sell Tickets Automatically");
sellButton.addActionListener(e -> {
new Thread(() -> {
Random random = new Random();
int remainingTickets = TOTAL_TICKETS;
while (remainingTickets > 0) {
int windowIndex = random.nextInt(3);
if (soldTickets[windowIndex] < WINDOW_TICKETS[windowIndex]) {
soldTickets[windowIndex]++;
remainingTickets--;
SwingUtilities.invokeLater(() -> {
soldTicketFields[windowIndex].setText(String.valueOf(soldTickets[windowIndex]));
});
}
try {
Thread.sleep(SELL_INTERVAL);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}).start();
});
this.add(sellButton);
this.setVisible(true);
}
public static void main(String[] args) {
new TicketSellingGUI();
}
}
```
这个程序中,我们创建了一个名为TicketSellingGUI的类,继承自JFrame类。在构造函数中,我们设置了窗口的标题、大小和布局,并创建了三个子窗口的标签和文本框,并添加到了主窗口中。我们还创建了一个“自动卖票”按钮,并添加到了主窗口中。
当用户点击“自动卖票”按钮时,程序会启动一个新的线程,在该线程中不断地随机选择一个窗口,并尝试卖出一张票。如果该窗口还有余票,就将已售票数加1,并更新对应的文本框。程序会每隔2秒钟进行一次卖票操作,直到所有票都售出为止。
需要注意的是,在更新GUI组件时,我们要使用SwingUtilities.invokeLater()方法来确保更新操作在GUI线程中执行,以避免线程安全问题。
阅读全文