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

Java Swing测验:如何固定问题标签文本并修复错误提示残留问题

Java Swing测验程序问题修复与优化方案

问题根源

你的问题出在切换题目时未重置单选按钮状态与提示文本,且提示显示逻辑未与当前题目绑定——之前选中的错误选项状态残留,导致切换到新题目后提示仍保留。

核心修复步骤

1. 切换题目时重置UI状态

每次加载新题目时,必须清空单选按钮的选中状态和提示文本,确保当前题目的UI是干净的。

2. 绑定提示显示逻辑到当前题目

仅在当前为目标题目+选中错误选项+点击提交按钮时,才显示对应搞笑提示,避免状态残留触发错误显示。

代码修正示例

重置UI方法

// 假设你有存储单选按钮的数组optionButtons,提示文本组件tipTextArea,题目显示组件questionLabel
private void resetQuestionUI(Question currentQuestion) {
    // 重置所有单选按钮选中状态
    for (JRadioButton radioBtn : optionButtons) {
        radioBtn.setSelected(false);
    }
    // 清空提示文本
    tipTextArea.setText("");
    // 更新题目内容
    questionLabel.setText(currentQuestion.getContent());
    // 更新选项文本
    String[] options = currentQuestion.getOptions();
    for (int i = 0; i < optionButtons.length; i++) {
        optionButtons[i].setText(options[i]);
    }
}

提交按钮事件处理

submitButton.addActionListener(e -> {
    // 找到选中的单选按钮
    JRadioButton selectedBtn = null;
    for (JRadioButton btn : optionButtons) {
        if (btn.isSelected()) {
            selectedBtn = btn;
            break;
        }
    }

    if (selectedBtn == null) {
        tipTextArea.setText("请先选择一个选项!");
        return;
    }

    Question currentQuestion = questions.get(currentQuestionIndex);
    // 判断答案是否正确
    if (currentQuestion.isCorrect(selectedBtn.getText())) {
        // 答对,切换下一题
        currentQuestionIndex++;
        if (currentQuestionIndex < questions.size()) {
            resetQuestionUI(questions.get(currentQuestionIndex));
        } else {
            tipTextArea.setText("恭喜完成所有测验!");
            submitButton.setEnabled(false);
        }
    } else {
        // 答错,判断是否为第三题的错误选项
        if (currentQuestionIndex == 2) { // 索引从0开始,第三题对应索引2
            // 根据选中的错误选项显示对应搞笑提示
            switch (selectedBtn.getText()) {
                case "错误选项1":
                    tipTextArea.setText("哈哈,这都能选?怕不是眼神飘了!");
                    break;
                case "错误选项2":
                    tipTextArea.setText("建议回去再读三遍题目!");
                    break;
                default:
                    tipTextArea.setText("回答错误,请重新选择!");
            }
        } else {
            tipTextArea.setText("回答错误,请重新选择!");
        }
    }
});

代码优化建议

1. 封装Question类,提升可维护性

把题目相关数据封装成实体类,避免硬编码逻辑:

class Question {
    private String content;
    private String[] options;
    private String correctAnswer;
    private Map<String, String> wrongOptionTips; // 错误选项对应的提示

    // 构造方法
    public Question(String content, String[] options, String correctAnswer, Map<String, String> wrongOptionTips) {
        this.content = content;
        this.options = options;
        this.correctAnswer = correctAnswer;
        this.wrongOptionTips = wrongOptionTips;
    }

    // 判断选中选项是否正确
    public boolean isCorrect(String selectedOption) {
        return correctAnswer.equals(selectedOption);
    }

    // 获取错误选项对应的提示
    public String getWrongTip(String selectedOption) {
        return wrongOptionTips.getOrDefault(selectedOption, "回答错误,请重新选择!");
    }

    // Getter方法
    public String getContent() { return content; }
    public String[] getOptions() { return options; }
}

使用时,第三题可以这样初始化:

Map<String, String> thirdQuestionTips = new HashMap<>();
thirdQuestionTips.put("错误选项1", "哈哈,这都能选?怕不是眼神飘了!");
thirdQuestionTips.put("错误选项2", "建议回去再读三遍题目!");
Question thirdQuestion = new Question(
    "第三题题目内容",
    new String[]{"正确选项", "错误选项1", "错误选项2"},
    "正确选项",
    thirdQuestionTips
);

这样提交时的错误提示逻辑可以简化为:

tipTextArea.setText(currentQuestion.getWrongTip(selectedBtn.getText()));

2. 使用ButtonGroup管理单选按钮

确保同一时间只有一个单选按钮被选中,避免多选混乱:

ButtonGroup optionGroup = new ButtonGroup();
for (JRadioButton btn : optionButtons) {
    optionGroup.add(btn);
}

3. 拆分逻辑到独立方法

把UI初始化、题目加载、答案判断等逻辑拆分到不同方法,让代码结构更清晰,比如:

  • initUI():初始化所有组件
  • loadQuestion(Question question):加载指定题目的UI内容
  • checkAnswer(JRadioButton selectedBtn):处理答案判断逻辑

4. 避免硬编码索引

不要直接用currentQuestionIndex == 2判断第三题,可以给Question类加一个isFunnyTipEnabled()方法,或者用枚举标识题目类型,扩展性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:44:59