Java Swing图形用户界面

发布时间:2026/7/2 1:24:14

Java Swing图形用户界面 一、文档需求梳理1.相关知识点GUI相关的类组件的属性及功能事件源、监视器、处理事件的接口2.实验目的学习掌握事件处理3.实验要求按以下需求可扩充设计并完成一个能运行的且界面美观的小软件。提交可运行软件程序主要针对小学生的算术计算。1、可以自定义计算的难度此项可根据功能进行扩展2、随机获取不一样的题目能通过按键触发确定填写输入的答案是否正确。3、计算满足 - * /(可扩展4、操作数可以是整数、小数、分数等等可扩展开发环境VSCode Java 扩展包VSCode 安装插件Extension Pack for Java自带 JDK、编译运行、图形界面支持配置本地 JDK8 及以上版本Swing 图形库内置无需额外下载二、完整可运行代码import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; public class MathGame extends JFrame { // 界面组件 private JComboBoxString diffBox; // 难度选择 private JLabel lblQuestion; // 题目显示 private JTextField txtAnswer; // 答案输入框 private JButton btnCheck; // 校验按钮 private JLabel lblTip; // 对错提示 private JLabel lblScore; // 得分统计 // 运算数据 private Random random new Random(); private int num1, num2, op; private double rightAns; private int rightCount 0, wrongCount 0; public MathGame() { initUI(); createQuestion(); // 初始生成第一题 } // 初始化界面 private void initUI() { setTitle(小学生算术练习器); setSize(420, 260); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // 窗口居中 setLayout(new GridLayout(6, 1, 8, 8)); setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); // 1.难度选择 JPanel p1 new JPanel(); p1.add(new JLabel(选择难度)); String[] diffs {简单(0-10整数), 中等(0-50整数), 困难(小数四则)}; diffBox new JComboBox(diffs); p1.add(diffBox); add(p1); // 2.题目展示 lblQuestion new JLabel(题目, SwingConstants.CENTER); lblQuestion.setFont(new Font(微软雅黑, Font.BOLD, 20)); add(lblQuestion); // 3.答案输入 JPanel p3 new JPanel(); p3.add(new JLabel(你的答案)); txtAnswer new JTextField(12); p3.add(txtAnswer); add(p3); // 4.校验按钮 btnCheck new JButton(确认答案); add(btnCheck); // 5.对错提示 lblTip new JLabel(等待答题, SwingConstants.CENTER); lblTip.setFont(new Font(微软雅黑, Font.BOLD, 16)); add(lblTip); // 6.得分统计 lblScore new JLabel(答对0 道 | 答错0 道, SwingConstants.CENTER); add(lblScore); // 绑定按钮点击事件 btnCheck.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent e) { checkAnswer(); } }); } // 随机生成题目 private void createQuestion() { String diff (String) diffBox.getSelectedItem(); op random.nextInt(4); // 0 1- 2* 3/ double n1, n2; switch (diff) { case 简单(0-10整数): n1 random.nextInt(11); n2 random.nextInt(11); break; case 中等(0-50整数): n1 random.nextInt(51); n2 random.nextInt(51); break; default: // 困难小数 n1 Math.round(random.nextDouble() * 50 * 10) / 10.0; n2 Math.round(random.nextDouble() * 20 * 10) / 10.0; break; } num1 (int) n1; num2 (int) n2; // 计算标准答案 switch (op) { case 0: rightAns n1 n2; break; case 1: rightAns n1 - n2; break; case 2: rightAns n1 * n2; break; case 3: if (n2 0) n2 1; // 除数不能为0 rightAns n1 / n2; break; } // 拼接题目字符串 char operator; switch (op) { case 0: operator ; break; case 1: operator -; break; case 2: operator *; break; default: operator /; } lblQuestion.setText( n1 operator n2 ?); txtAnswer.setText(); lblTip.setText(等待答题); } // 校验答案 private void checkAnswer() { String input txtAnswer.getText().trim(); double userAns; try { userAns Double.parseDouble(input); } catch (Exception e) { lblTip.setText(输入格式错误请输入数字); lblTip.setForeground(Color.RED); return; } // 误差0.01内判定正确适配小数 if (Math.abs(userAns - rightAns) 0.01) { lblTip.setText(回答正确); lblTip.setForeground(new Color(0, 160, 0)); rightCount; } else { lblTip.setText(回答错误正确答案 String.format(%.2f, rightAns)); lblTip.setForeground(Color.RED); wrongCount; } // 更新得分 lblScore.setText(答对 rightCount 道 | 答错 wrongCount 道); // 2秒后自动刷新下一题 new Thread(() - { try { Thread.sleep(2000); } catch (InterruptedException ex) { } SwingUtilities.invokeLater(this::createQuestion); }).start(); } public static void main(String[] args) { // Swing程序需在图形线程启动 SwingUtilities.invokeLater(() - { MathGame game new MathGame(); game.setVisible(true); }); } }三、VSCode 运行步骤环境准备打开 VSCode左侧扩展商店搜索安装 Extension Pack for Java安装完成后配置 JDK1.8 及以上版本。新建文件新建文件夹在文件夹内创建 MathGame.java将上面完整代码复制粘贴进去。运行程序右键代码空白处 → 选择 Run Java或点击代码上方绿色运行按钮自动编译并弹出 Swing 图形窗口

相关新闻