用Java编写GUI界面,模拟抢红包游戏,在界面输入红包大小和抢红包人姓名(用逗号隔开),输出系统当前时间以及每个人抢的红包大小,要求每个人抢的红包最少不能少于0.01元,精确到小数点后两位

时间: 2024-04-05 10:29:20 浏览: 13
好的,这是一个很有趣的项目!首先,我们需要创建一个 Java GUI 窗口来接收用户输入和显示输出结果。你可以使用Swing或JavaFX等库来创建GUI界面。下面是一个简单的Swing实现: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; public class RedPacketGame extends JFrame implements ActionListener { private JLabel amountLabel, nameLabel, timeLabel; private JTextField amountText, nameText; private JButton addButton, startButton; private JTextArea resultArea; private ArrayList<String> names; private ArrayList<Double> amounts; public RedPacketGame() { super("模拟抢红包游戏"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 500); setResizable(false); // 创建GUI组件 amountLabel = new JLabel("红包大小:"); nameLabel = new JLabel("抢红包人:"); timeLabel = new JLabel(); amountText = new JTextField(10); nameText = new JTextField(30); addButton = new JButton("添加"); startButton = new JButton("开始"); resultArea = new JTextArea(20, 40); names = new ArrayList<>(); amounts = new ArrayList<>(); // 添加GUI组件 JPanel inputPanel = new JPanel(); inputPanel.add(amountLabel); inputPanel.add(amountText); inputPanel.add(nameLabel); inputPanel.add(nameText); inputPanel.add(addButton); inputPanel.add(startButton); inputPanel.add(timeLabel); JScrollPane scrollPane = new JScrollPane(resultArea); add(inputPanel, BorderLayout.NORTH); add(scrollPane, BorderLayout.CENTER); // 添加事件监听器 addButton.addActionListener(this); startButton.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == addButton) { addRedPacket(); } else if (e.getSource() == startButton) { startGame(); } } private void addRedPacket() { String inputAmount = amountText.getText().trim(); String inputNames = nameText.getText().trim(); if (inputAmount.equals("") || inputNames.equals("")) { JOptionPane.showMessageDialog(this, "请输入红包大小和抢红包人姓名"); return; } double amount = 0; try { amount = Double.parseDouble(inputAmount); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(this, "请输入正确的红包大小"); return; } if (amount <= 0) { JOptionPane.showMessageDialog(this, "红包大小必须大于0"); return; } String[] namesArray = inputNames.split(","); for (String name : namesArray) { name = name.trim(); if (name.equals("")) { JOptionPane.showMessageDialog(this, "请输入正确的抢红包人姓名"); return; } names.add(name); amounts.add(0.0); } amountText.setText(""); nameText.setText(""); JOptionPane.showMessageDialog(this, "添加成功"); } private void startGame() { if (names.isEmpty()) { JOptionPane.showMessageDialog(this, "请添加抢红包人"); return; } double leftAmount = Double.parseDouble(amountText.getText().trim()); if (leftAmount <= 0) { JOptionPane.showMessageDialog(this, "红包大小必须大于0"); return; } resultArea.setText(""); while (leftAmount > 0) { for (int i = 0; i < names.size(); i++) { if (leftAmount <= 0) { break; } double amount = Math.random() * leftAmount; if (amount < 0.01) { amount = 0.01; } amounts.set(i, amounts.get(i) + amount); leftAmount -= amount; resultArea.append(names.get(i) + " 抢到了 " + String.format("%.2f", amount) + " 元\n"); try { Thread.sleep(500); // 等待0.5秒 } catch (InterruptedException ex) { ex.printStackTrace(); } } } resultArea.append("红包已被抢完\n"); for (int i = 0; i < names.size(); i++) { resultArea.append(names.get(i) + " 抢到了 " + String.format("%.2f", amounts.get(i)) + " 元\n"); } // 显示系统当前时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); timeLabel.setText("当前时间:" + sdf.format(new Date())); addButton.setEnabled(false); startButton.setEnabled(false); } public static void main(String[] args) { RedPacketGame game = new RedPacketGame(); game.setVisible(true); } } ``` 这个程序包含了一个 JFrame 窗口,用户可以在上面输入红包大小和抢红包人姓名,然后点击“添加”按钮来添加抢红包人。在添加完所有抢红包人后,用户可以点击“开始”按钮来开始模拟抢红包游戏。程序会随机生成每个人抢到的红包金额,并在界面上显示出来。当红包被抢完后,程序会显示每个人最终抢到的金额,并显示当前系统时间。 在上面的代码中,我们使用了一个 ArrayList 来存储抢红包人的姓名和抢到的金额。为了保证每个人抢到的金额最少为0.01元,我们在生成随机金额时,如果生成的金额小于0.01元,则将其设置为0.01元。此外,为了让程序的运行看起来更加真实,我们在每次生成随机金额后,让程序等待0.5秒再继续运行。 希望这个程序能够满足你的需求!如果你有其他问题或者需要进一步的帮助,请随时联系我。

相关推荐

最新推荐

recommend-type

Java的带GUI界面猜数字游戏的实现示例

主要介绍了Java的带GUI界面猜数字游戏的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

PyCharm GUI界面开发和exe文件生成的实现

主要介绍了PyCharm GUI界面开发和exe文件生成,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例

主要介绍了python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例,需要的朋友可以参考下
recommend-type

JAVA图形界面(GUI)之表格的示例代码

主要介绍了JAVA图形界面(GUI)之表格的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

Python PyQt5运行程序把输出信息展示到GUI图形界面上

概述:最近在赶毕业设计,遇到一个问题,爬虫模块我用PyQt5写了图形界面,为了将所有的输出信息都显示到图形界面上遇到了问题。 先演示一下效果最终效果吧,下面两张图用来镇楼。可以看到我们图形界面和程序运行的...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

hive中 的Metastore

Hive中的Metastore是一个关键的组件,它用于存储和管理Hive中的元数据。这些元数据包括表名、列名、表的数据类型、分区信息、表的存储位置等信息。Hive的查询和分析都需要Metastore来管理和访问这些元数据。 Metastore可以使用不同的后端存储来存储元数据,例如MySQL、PostgreSQL、Oracle等关系型数据库,或者Hadoop分布式文件系统中的HDFS。Metastore还提供了API,使得开发人员可以通过编程方式访问元数据。 Metastore的另一个重要功能是跟踪表的版本和历史。当用户对表进行更改时,Metastore会记录这些更改,并且可以让用户回滚到
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。