利用java3、编写GUI界面,模拟抢红包游戏,在界面输入红包大小和抢红包人姓名(用逗号隔开),输出系统当前时间以及每个人抢的红包大小,要求每个人抢的红包最少不能少于0.01元,精确到小数点后两位。
时间: 2024-03-31 21:35:44 浏览: 86
gui.rar_java 在GUI界面
好的,我可以帮你解决这个问题。下面是一个简单的Java程序,用于模拟抢红包游戏并在GUI界面中显示结果:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
public class RedPacketGame extends JFrame implements ActionListener {
private JLabel lblRedPacketSize, lblUserName;
private JTextField txtRedPacketSize, txtUserName;
private JButton btnSubmit;
private JTextArea txtResult;
private JScrollPane scrollPane;
public RedPacketGame() {
super("抢红包游戏");
// 创建控件
lblRedPacketSize = new JLabel("红包大小(元):");
lblUserName = new JLabel("抢红包人姓名:");
txtRedPacketSize = new JTextField(10);
txtUserName = new JTextField(10);
btnSubmit = new JButton("提交");
btnSubmit.addActionListener(this);
txtResult = new JTextArea(10, 30);
txtResult.setEditable(false);
scrollPane = new JScrollPane(txtResult);
// 添加控件
JPanel panel = new JPanel(new GridLayout(3, 2));
panel.add(lblRedPacketSize);
panel.add(txtRedPacketSize);
panel.add(lblUserName);
panel.add(txtUserName);
panel.add(btnSubmit);
Container container = getContentPane();
container.setLayout(new BorderLayout());
container.add(panel, BorderLayout.NORTH);
container.add(scrollPane, BorderLayout.CENTER);
// 设置窗口大小、位置和可见性
setSize(400, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new RedPacketGame();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnSubmit) {
try {
// 获取红包大小和抢红包人姓名
double redPacketSize = Double.parseDouble(txtRedPacketSize.getText());
String[] userNames = txtUserName.getText().split(",");
// 计算每个人抢到的红包大小
ArrayList<Double> redPacketList = new ArrayList<>();
double remaining = redPacketSize;
for (int i = 0; i < userNames.length; i++) {
double money = Math.random() * remaining / (userNames.length - i) + 0.01;
money = Double.parseDouble(new DecimalFormat("#.00").format(money));
redPacketList.add(money);
remaining -= money;
}
// 显示结果
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
txtResult.append("抢红包时间:" + sdf.format(new Date()) + "\n");
for (int i = 0; i < userNames.length; i++) {
txtResult.append(userNames[i] + " 抢到了 " + redPacketList.get(i) + " 元\n");
}
txtResult.append("\n");
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(this, "红包大小必须是数字!", "错误", JOptionPane.ERROR_MESSAGE);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
```
这个程序使用了Java的Swing库创建GUI界面。在界面中输入红包大小和抢红包人姓名后,程序会计算每个人抢到的红包大小,并在界面中显示结果。
请注意,为了保证每个人抢到的红包大小最少为0.01元,程序在计算时使用了Java的Math库和DecimalFormat类。同时,为了确保结果的精确性,程序还使用了Java的Date和SimpleDateFormat类获取系统当前时间。
阅读全文