public class AnonyDemo {public static void main(String}TOC实验四Java Swing 小学生算术练习难度选择简单整数/中等小数/进阶分数随机四则运算题目 - * /输入答案点击确认/回车按键校验对错实时统计正确/错误数量界面布局美观Swing事件处理完整importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.Random;publicclassMathPracticeextendsJFrame{// 界面组件privateJRadioButtoneasyRBtn,midRBtn,hardRBtn;privateJLabelquestionLabel;privateJTextFieldanswerInput;privateJButtonconfirmBtn,nextBtn;privateJLabelresultTipLabel;privateJLabelcountLabel;// 题目数据privatedoublenum1,num2;privatecharop;privateintrightCount0;privateintwrongCount0;privateRandomrandomnewRandom();publicMathPractice(){// 窗口基础设置setTitle(小学生算术练习软件);setSize(450,320);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setLayout(newBorderLayout(10,10));setResizable(false);// 1. 难度选择面板JPaneldiffPanelnewJPanel();diffPanel.setLayout(newFlowLayout(FlowLayout.CENTER,15,5));diffPanel.setBorder(BorderFactory.createTitledBorder(选择难度));easyRBtnnewJRadioButton(简单(整数),true);midRBtnnewJRadioButton(中等(小数));hardRBtnnewJRadioButton(进阶(分数));ButtonGroupgroupnewButtonGroup();group.add(easyRBtn);group.add(midRBtn);group.add(hardRBtn);diffPanel.add(easyRBtn);diffPanel.add(midRBtn);diffPanel.add(hardRBtn);// 2. 题目展示面板JPanelqPanelnewJPanel();qPanel.setLayout(newFlowLayout(FlowLayout.CENTER,10,10));questionLabelnewJLabel(点击下一题生成题目,JLabel.CENTER);questionLabel.setFont(newFont(黑体,Font.BOLD,24));questionLabel.setPreferredSize(newDimension(400,40));qPanel.add(questionLabel);// 3. 答案输入面板JPanelinputPanelnewJPanel();inputPanel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5));JLabeltipnewJLabel(你的答案);tip.setFont(newFont(宋体,Font.PLAIN,16));answerInputnewJTextField(12);answerInput.setFont(newFont(宋体,Font.PLAIN,16));// 回车触发确认答案answerInput.addActionListener(newConfirmListener());confirmBtnnewJButton(确认答案);confirmBtn.addActionListener(newConfirmListener());nextBtnnewJButton(下一题);nextBtn.addActionListener(newNextQuestionListener());inputPanel.add(tip);inputPanel.add(answerInput);inputPanel.add(confirmBtn);inputPanel.add(nextBtn);// 4. 提示与统计面板JPanelbottomPanelnewJPanel();bottomPanel.setLayout(newGridLayout(2,1,5,5));resultTipLabelnewJLabel(请生成题目开始练习,JLabel.CENTER);resultTipLabel.setFont(newFont(宋体,Font.BOLD,16));countLabelnewJLabel(正确0 道 | 错误0 道,JLabel.CENTER);bottomPanel.add(resultTipLabel);bottomPanel.add(countLabel);// 组装所有面板add(diffPanel,BorderLayout.NORTH);add(qPanel,BorderLayout.CENTER);add(inputPanel,BorderLayout.SOUTH);add(bottomPanel,BorderLayout.PAGE_END);// 边距留白getContentPane().setBorder(BorderFactory.createEmptyBorder(10,10,10,10));}// 生成随机四则运算题目privatevoidcreateQuestion(){char[]ops{,-,*,/};opops[random.nextInt(4)];// 根据难度生成数字if(easyRBtn.isSelected()){// 简单1~20整数num1random.nextInt(20)1;num2random.nextInt(20)1;// 除法避免小数保证整除if(op/){num2random.nextInt(10)1;num1num2*(random.nextInt(10)1);}}elseif(midRBtn.isSelected()){// 中等1位小数num1Math.round((random.nextDouble()*201)*10)/10.0;num2Math.round((random.nextDouble()*201)*10)/10.0;if(op/){num2Math.round((random.nextDouble()*101)*10)/10.0;num1num2*(random.nextInt(10)1);}}else{// 进阶模拟分数展示用小数计算num1random.nextInt(10)1;num2random.nextInt(9)1;if(op/){num1num2*(random.nextInt(8)1);}}// 更新题目显示questionLabel.setText(num1 op num2 ?);answerInput.setText();resultTipLabel.setText(请输入答案后确认);}// 计算标准答案privatedoublegetStandardAnswer(){returnswitch(op){case-num1num2;case--num1-num2;case*-num1*num2;case/-num1/num2;default-0;};}// 确认答案按钮/回车事件监听器classConfirmListenerimplementsActionListener{OverridepublicvoidactionPerformed(ActionEvente){StringinputStranswerInput.getText().trim();if(inputStr.isEmpty()){resultTipLabel.setText(⚠️ 请输入答案);resultTipLabel.setForeground(Color.RED);return;}doubleuserAns;try{userAnsDouble.parseDouble(inputStr);}catch(NumberFormatExceptionex){resultTipLabel.setText(⚠️ 输入格式错误请输入数字);resultTipLabel.setForeground(Color.RED);return;}doublestdAnsgetStandardAnswer();// 浮点误差兼容差值小于0.01判定正确if(Math.abs(userAns-stdAns)0.01){rightCount;resultTipLabel.setText(✅ 回答正确太棒了);resultTipLabel.setForeground(newColor(0,150,0));}else{wrongCount;resultTipLabel.setText(❌ 回答错误正确答案stdAns);resultTipLabel.setForeground(Color.RED);}// 更新统计countLabel.setText(正确rightCount 道 | 错误wrongCount 道);}}// 下一题按钮监听器classNextQuestionListenerimplementsActionListener{OverridepublicvoidactionPerformed(ActionEvente){createQuestion();resultTipLabel.setForeground(Color.BLACK);}}publicstaticvoidmain(String[]args){// Swing程序建议在UI线程启动SwingUtilities.invokeLater(()-{MathPracticeappnewMathPractice();app.setVisible(true);});}}一、实验对应知识点说明Swing核心GUI类JFrame主窗口容器JPanel面板容器布局管理JLabel文本标签题目、提示、统计JTextField单行输入框填写答案JButton按钮组件JRadioButton/ButtonGroup单选难度选择布局管理器BorderLayout、FlowLayout、GridLayout事件处理三要素事件源按钮JButton、输入框JTextField监听器接口ActionListener事件处理实现actionPerformed()方法匿名内部类/内部类完成回调扩展功能输入框回车直接校验答案复用同一监听器题目功能实现四则运算 - * /随机抽取难度分层整数/小数/分数三类随机数生成容错处理除法保证整除、浮点计算误差兼容、非法输入捕获数据统计记录正确/错误题目数量二、运行操作步骤新建文本文档复制全部代码粘贴修改文件后缀为MathPractice.java使用javac编译、java运行或直接在IDEA/Eclipse打开运行操作流程选择难度等级点击【下一题】生成随机算术题在输入框填写答案点击【确认答案】或直接按回车键校验界面实时提示对错并更新答题统计重复点击下一题持续练习三、实验拓展说明操作数扩展代码已支持整数、小数进阶模式可自行修改生成分数字符串展示运算符扩展修改ops数组新增%取模运算难度扩展新增高难度单选框扩大随机数范围、增加多步运算界面扩展增加清空统计、计时、错题本功能按钮交互扩展添加弹窗提示、答题音效、分数评级##核心要点Swing使用容器组件分层搭建GUI界面通过布局管理器规范控件排版Java事件模型组件绑定监听器触发动作时执行重写的事件处理方法匿名内部类/内部类实现监听器简化回调代码适配GUI交互场景随机数、浮点运算、异常捕获完成算术题库逻辑实现小学生练习需求setAccessible、setFont、setForeground等方法修改组件外观属性优化界面美观度
匿名内部类和实验四
public class AnonyDemo {public static void main(String}TOC实验四Java Swing 小学生算术练习难度选择简单整数/中等小数/进阶分数随机四则运算题目 - * /输入答案点击确认/回车按键校验对错实时统计正确/错误数量界面布局美观Swing事件处理完整importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.Random;publicclassMathPracticeextendsJFrame{// 界面组件privateJRadioButtoneasyRBtn,midRBtn,hardRBtn;privateJLabelquestionLabel;privateJTextFieldanswerInput;privateJButtonconfirmBtn,nextBtn;privateJLabelresultTipLabel;privateJLabelcountLabel;// 题目数据privatedoublenum1,num2;privatecharop;privateintrightCount0;privateintwrongCount0;privateRandomrandomnewRandom();publicMathPractice(){// 窗口基础设置setTitle(小学生算术练习软件);setSize(450,320);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null);setLayout(newBorderLayout(10,10));setResizable(false);// 1. 难度选择面板JPaneldiffPanelnewJPanel();diffPanel.setLayout(newFlowLayout(FlowLayout.CENTER,15,5));diffPanel.setBorder(BorderFactory.createTitledBorder(选择难度));easyRBtnnewJRadioButton(简单(整数),true);midRBtnnewJRadioButton(中等(小数));hardRBtnnewJRadioButton(进阶(分数));ButtonGroupgroupnewButtonGroup();group.add(easyRBtn);group.add(midRBtn);group.add(hardRBtn);diffPanel.add(easyRBtn);diffPanel.add(midRBtn);diffPanel.add(hardRBtn);// 2. 题目展示面板JPanelqPanelnewJPanel();qPanel.setLayout(newFlowLayout(FlowLayout.CENTER,10,10));questionLabelnewJLabel(点击下一题生成题目,JLabel.CENTER);questionLabel.setFont(newFont(黑体,Font.BOLD,24));questionLabel.setPreferredSize(newDimension(400,40));qPanel.add(questionLabel);// 3. 答案输入面板JPanelinputPanelnewJPanel();inputPanel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5));JLabeltipnewJLabel(你的答案);tip.setFont(newFont(宋体,Font.PLAIN,16));answerInputnewJTextField(12);answerInput.setFont(newFont(宋体,Font.PLAIN,16));// 回车触发确认答案answerInput.addActionListener(newConfirmListener());confirmBtnnewJButton(确认答案);confirmBtn.addActionListener(newConfirmListener());nextBtnnewJButton(下一题);nextBtn.addActionListener(newNextQuestionListener());inputPanel.add(tip);inputPanel.add(answerInput);inputPanel.add(confirmBtn);inputPanel.add(nextBtn);// 4. 提示与统计面板JPanelbottomPanelnewJPanel();bottomPanel.setLayout(newGridLayout(2,1,5,5));resultTipLabelnewJLabel(请生成题目开始练习,JLabel.CENTER);resultTipLabel.setFont(newFont(宋体,Font.BOLD,16));countLabelnewJLabel(正确0 道 | 错误0 道,JLabel.CENTER);bottomPanel.add(resultTipLabel);bottomPanel.add(countLabel);// 组装所有面板add(diffPanel,BorderLayout.NORTH);add(qPanel,BorderLayout.CENTER);add(inputPanel,BorderLayout.SOUTH);add(bottomPanel,BorderLayout.PAGE_END);// 边距留白getContentPane().setBorder(BorderFactory.createEmptyBorder(10,10,10,10));}// 生成随机四则运算题目privatevoidcreateQuestion(){char[]ops{,-,*,/};opops[random.nextInt(4)];// 根据难度生成数字if(easyRBtn.isSelected()){// 简单1~20整数num1random.nextInt(20)1;num2random.nextInt(20)1;// 除法避免小数保证整除if(op/){num2random.nextInt(10)1;num1num2*(random.nextInt(10)1);}}elseif(midRBtn.isSelected()){// 中等1位小数num1Math.round((random.nextDouble()*201)*10)/10.0;num2Math.round((random.nextDouble()*201)*10)/10.0;if(op/){num2Math.round((random.nextDouble()*101)*10)/10.0;num1num2*(random.nextInt(10)1);}}else{// 进阶模拟分数展示用小数计算num1random.nextInt(10)1;num2random.nextInt(9)1;if(op/){num1num2*(random.nextInt(8)1);}}// 更新题目显示questionLabel.setText(num1 op num2 ?);answerInput.setText();resultTipLabel.setText(请输入答案后确认);}// 计算标准答案privatedoublegetStandardAnswer(){returnswitch(op){case-num1num2;case--num1-num2;case*-num1*num2;case/-num1/num2;default-0;};}// 确认答案按钮/回车事件监听器classConfirmListenerimplementsActionListener{OverridepublicvoidactionPerformed(ActionEvente){StringinputStranswerInput.getText().trim();if(inputStr.isEmpty()){resultTipLabel.setText(⚠️ 请输入答案);resultTipLabel.setForeground(Color.RED);return;}doubleuserAns;try{userAnsDouble.parseDouble(inputStr);}catch(NumberFormatExceptionex){resultTipLabel.setText(⚠️ 输入格式错误请输入数字);resultTipLabel.setForeground(Color.RED);return;}doublestdAnsgetStandardAnswer();// 浮点误差兼容差值小于0.01判定正确if(Math.abs(userAns-stdAns)0.01){rightCount;resultTipLabel.setText(✅ 回答正确太棒了);resultTipLabel.setForeground(newColor(0,150,0));}else{wrongCount;resultTipLabel.setText(❌ 回答错误正确答案stdAns);resultTipLabel.setForeground(Color.RED);}// 更新统计countLabel.setText(正确rightCount 道 | 错误wrongCount 道);}}// 下一题按钮监听器classNextQuestionListenerimplementsActionListener{OverridepublicvoidactionPerformed(ActionEvente){createQuestion();resultTipLabel.setForeground(Color.BLACK);}}publicstaticvoidmain(String[]args){// Swing程序建议在UI线程启动SwingUtilities.invokeLater(()-{MathPracticeappnewMathPractice();app.setVisible(true);});}}一、实验对应知识点说明Swing核心GUI类JFrame主窗口容器JPanel面板容器布局管理JLabel文本标签题目、提示、统计JTextField单行输入框填写答案JButton按钮组件JRadioButton/ButtonGroup单选难度选择布局管理器BorderLayout、FlowLayout、GridLayout事件处理三要素事件源按钮JButton、输入框JTextField监听器接口ActionListener事件处理实现actionPerformed()方法匿名内部类/内部类完成回调扩展功能输入框回车直接校验答案复用同一监听器题目功能实现四则运算 - * /随机抽取难度分层整数/小数/分数三类随机数生成容错处理除法保证整除、浮点计算误差兼容、非法输入捕获数据统计记录正确/错误题目数量二、运行操作步骤新建文本文档复制全部代码粘贴修改文件后缀为MathPractice.java使用javac编译、java运行或直接在IDEA/Eclipse打开运行操作流程选择难度等级点击【下一题】生成随机算术题在输入框填写答案点击【确认答案】或直接按回车键校验界面实时提示对错并更新答题统计重复点击下一题持续练习三、实验拓展说明操作数扩展代码已支持整数、小数进阶模式可自行修改生成分数字符串展示运算符扩展修改ops数组新增%取模运算难度扩展新增高难度单选框扩大随机数范围、增加多步运算界面扩展增加清空统计、计时、错题本功能按钮交互扩展添加弹窗提示、答题音效、分数评级##核心要点Swing使用容器组件分层搭建GUI界面通过布局管理器规范控件排版Java事件模型组件绑定监听器触发动作时执行重写的事件处理方法匿名内部类/内部类实现监听器简化回调代码适配GUI交互场景随机数、浮点运算、异常捕获完成算术题库逻辑实现小学生练习需求setAccessible、setFont、setForeground等方法修改组件外观属性优化界面美观度