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 JComboBox<String> 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 图形窗口
更多推荐




所有评论(0)