单机考试系统——登录和考试界面

一、准备工作

Components类:用来定义一些比较关键的组件函数

另一个组员写的函数,包括从文件中读取用户名和密码,返回指定的文件和题目数组的初始化和重新考试。

二、登陆界面

要实现这种登录,可以用卡片式界面模拟,如果符合判定要求则翻页,否则阻止登录并弹出对话框提醒用户输入正确信息进入。

三、考试界面

分多个panel进行分装组件,因为在判断并记录选项时,如果多个不同组件一块会导致判断错误。

然后把这些放到一个大平面内。

接着实现开始考试,切题保存答案,答题卡,倒计时和保存并计算答案功能。

难点是倒计时功能,因为此功能可能会和其他点击冲突,所以需要使用多线程,将倒计时单独放在一个线程中确保两者不冲突。

代码如下:

timer = new Timer(1000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    timeLeft--;
                    int minutes = timeLeft / 60;
                    int seconds = timeLeft % 60;
                    count.setText(String.format("%02d:%02d", minutes, seconds));
                    if (timeLeft <= 0) {
                        timer.stop();
                        overExam(jt);

                        up.setEnabled(false);
                        down.setEnabled(false);
                        save.setEnabled(false);
                        over.setEnabled(false);
                        answercard.setEnabled(false);
                        ok.setEnabled(true);

                        timer.stop();

                        Restart();
                    }
                }
            });

1.Timer timer = new Timer(1000, new ActionListener() { ... });:创建一个定时器对象 timer,并指定每隔 1000 毫秒(即 1 秒)触发一次的事件。使用了匿名内部类来创建 ActionListener 对象,实现了 actionPerformed 方法。

2.timeLeft--:将剩余时间减去 1 秒。

3.计算分钟和秒数:

int minutes = timeLeft / 60;:将剩余时间转换为分钟。
int seconds = timeLeft % 60;:计算剩余时间对 60 取模得到剩余的秒数。
count.setText(String.format("%02d:%02d", minutes, seconds));:更新显示剩余时间的文本框内容,采用 "%02d" 格式化字符串将分钟和秒数格式化为两位数,并以 ":"分隔。

3.if (timeLeft <= 0) { ... }:如果剩余时间小于等于 0,则表示时间已经用完,执行以下操作:

timer.stop();:停止定时器,防止继续触发事件。
overExam(jt);:调用 overExam 方法并传入参数 jt。
禁用一些按钮:up.setEnabled(false)、down.setEnabled(false)、save.setEnabled(false)、over.setEnabled(false)、answercard.setEnabled(false),并启用 ok 按钮。
timer.stop();:再次停止定时器,虽然之前已经停止,但这里再次调用是为了确保定时器被完全关闭。
Restart();:调用 Restart 方法重新初始化答案数组。

然后启动线程:

SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    timer.start();
                }
            });

通过调用SwingUtilities.invokeLater方法,将一个新的Runnable任务添加到事件分派线程的队列中。这个Runnable任务的run方法会在稍后的时间点被事件分派线程调用。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值