请根据如下要求编写一个java程序:实现多窗口卖票情况进度显示功能;界面上显示三个横向布局的小窗口,每个小窗口之间间隔开,小窗口的内容包括:(1)窗口名称为TXY_2_016_该窗口的编号(2)该窗口分配的票数(3)已卖票数;要求所有小窗口分配的票数总和等于16,每个小窗口每次卖出的票数由不大于5的随机数指定。添加一个按键,通过按键手动启动窗口卖票,同时在小窗口上的已卖票数内容中实时显示每个窗口已卖票数。谢谢。
时间: 2024-02-17 22:05:12 浏览: 71
好的,我可以为您提供一个大致的Java程序框架,您可以根据需求进行修改和完善。代码如下:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class TicketSellingSystem extends JFrame implements ActionListener {
private static final int WINDOW_NUM = 3; // 窗口数量
private static final int TOTAL_TICKETS = 16; // 总票数
private static final int MAX_SELL_TICKETS = 5; // 最大售票数
private JLabel[] windowLabels; // 窗口标签数组
private JLabel[] assignedTicketsLabels; // 已分配票数标签数组
private JLabel[] soldTicketsLabels; // 已售票数标签数组
private JButton sellButton; // 售票按钮
private int[] assignedTickets; // 已分配票数数组
private int[] soldTickets; // 已售票数数组
public TicketSellingSystem() {
initUI();
initData();
}
private void initUI() {
// 设置窗口标题和大小
setTitle("多窗口卖票情况进度显示");
setSize(500, 200);
setLocationRelativeTo(null); // 居中显示
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建内容面板和布局
JPanel contentPane = new JPanel(new GridLayout(1, WINDOW_NUM));
setContentPane(contentPane);
// 初始化窗口标签、已分配票数标签、已售票数标签数组
windowLabels = new JLabel[WINDOW_NUM];
assignedTicketsLabels = new JLabel[WINDOW_NUM];
soldTicketsLabels = new JLabel[WINDOW_NUM];
// 添加窗口标签、已分配票数标签、已售票数标签到内容面板中
for (int i = 0; i < WINDOW_NUM; i++) {
JPanel windowPanel = new JPanel(new GridLayout(3, 1));
windowLabels[i] = new JLabel("TXY_2_016_" + i, JLabel.CENTER);
assignedTicketsLabels[i] = new JLabel("已分配票数:" + assignedTickets[i], JLabel.CENTER);
soldTicketsLabels[i] = new JLabel("已售票数:" + soldTickets[i], JLabel.CENTER);
windowPanel.add(windowLabels[i]);
windowPanel.add(assignedTicketsLabels[i]);
windowPanel.add(soldTicketsLabels[i]);
contentPane.add(windowPanel);
}
// 添加售票按钮到内容面板中
sellButton = new JButton("售票");
sellButton.addActionListener(this);
contentPane.add(sellButton);
}
private void initData() {
// 初始化已分配票数数组和已售票数数组
assignedTickets = new int[]{5, 6, 5}; // 可以根据需求修改分配票数
soldTickets = new int[WINDOW_NUM];
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == sellButton) {
// 随机售票
Random random = new Random();
for (int i = 0; i < WINDOW_NUM; i++) {
int maxSellTickets = Math.min(MAX_SELL_TICKETS, TOTAL_TICKETS - soldTickets[i]); // 计算最大售票数
int sellTickets = random.nextInt(maxSellTickets + 1); // 随机售票数
soldTickets[i] += sellTickets; // 更新已售票数
soldTicketsLabels[i].setText("已售票数:" + soldTickets[i]); // 更新已售票数标签文本
}
}
}
public static void main(String[] args) {
TicketSellingSystem ticketSellingSystem = new TicketSellingSystem();
ticketSellingSystem.setVisible(true);
}
}
```
程序中使用了Swing进行窗口界面的设计,在初始化UI时,使用了GridLayout将窗口标签、已分配票数标签、已售票数标签等组件放在了一个Panel中。售票按钮使用ActionListener监听事件,并调用随机售票的方法。在随机售票方法中,使用了Random类实现随机售票,并更新了窗口的已售票数和已售票数标签的文本。
需要注意的是,该程序中并没有使用多线程进行售票操作,所以在售票时,如果窗口数量较多,有可能会出现卖票时间较长的情况。如果需要更快的售票速度,可以考虑使用多线程实现。
阅读全文