You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing多Frame间传递回合数变量的实现方法问询

解决Java Swing掷骰子游戏Frame间传递回合数的问题

1. 调整GamePage的构造函数

让GamePage类的构造函数接收回合数参数,并将其保存为成员变量,供后续游戏循环使用:

public class GamePage extends javax.swing.JFrame {
    private int totalRounds;

    // 带参数的构造函数,接收总回合数
    public GamePage(int rounds) {
        initComponents();
        this.totalRounds = rounds;
        // 可在此初始化游戏状态,比如当前回合计数器等
    }

    // 游戏运行方法,基于totalRounds控制循环次数
    public void run() {
        for (int currentRound = 1; currentRound <= totalRounds; currentRound++) {
            // 编写单轮游戏逻辑:用户选数、电脑选数、掷骰子、判定胜负等
            System.out.println("正在进行第" + currentRound + "回合");
        }
    }

    // 其余自动生成的GUI代码保持不变...
}

2. 修改起始Frame的按钮事件处理

在JFrameDiceGambalingGame的btnContActionPerformed方法中,将用户输入的回合数传递给GamePage,同时添加输入验证避免非法输入:

private void btnContActionPerformed(java.awt.event.ActionEvent evt) {                                        
    try {
        // 读取输入并转换为整数(回合数应为整数,无需用double)
        String inputText = txtRoundInput.getText();
        int rounds = Integer.parseInt(inputText);

        // 验证输入合法性
        if (rounds <= 0) {
            javax.swing.JOptionPane.showMessageDialog(this, "请输入大于0的有效回合数!");
            return;
        }

        // 创建GamePage实例时传入回合数
        GamePage gamePage = new GamePage(rounds);
        gamePage.setVisible(true);
        gamePage.run();

        // 隐藏当前起始窗口(可选,提升体验)
        this.setVisible(false);
    } catch (NumberFormatException e) {
        // 处理非数字输入的情况
        javax.swing.JOptionPane.showMessageDialog(this, "请输入有效的数字!");
    }
}

3. 关键优化点

  • 类型修正:回合数是整数,使用int替代double更符合逻辑,避免不必要的类型转换。
  • 输入验证:添加合法性检查,防止用户输入负数、非数字等无效内容导致程序崩溃。
  • 窗口切换:打开游戏窗口后隐藏起始窗口,让用户专注于游戏界面。

内容的提问来源于stack exchange,提问作者MythInSpace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:23:09