当前位置: 首页 > article >正文

实现一个日语假名自测小程序java之swing版

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        // 创建并显示 GUI
        SwingUtilities.invokeLater(() -> {
            JFrame frame = new JFrame("随机日语50音");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(400, 300);
            frame.setLayout(new BorderLayout());

            // 创建显示字符的标签
            JLabel characterLabel = new JLabel("あ", SwingConstants.CENTER);
            characterLabel.setFont(new Font("MS Gothic", Font.BOLD, 72)); // 设置字体大小
            frame.add(characterLabel, BorderLayout.CENTER);

            // 创建开始按钮
            JButton startButton = new JButton("开始");
            frame.add(startButton, BorderLayout.SOUTH);

            // 平假名和片假名的列表
            List<String> hiragana = Arrays.asList(
                    "あ", "い", "う", "え", "お",
                    "か", "き", "く", "け", "こ",
                    "さ", "し", "す", "せ", "そ",
                    "た", "ち", "つ", "て", "と",
                    "な", "に", "ぬ", "ね", "の",
                    "は", "ひ", "ふ", "へ", "ほ",
                    "ま", "み", "む", "め", "も",
                    "や", "ゆ", "よ",
                    "ら", "り", "る", "れ", "ろ",
                    "わ", "を", "ん"
            );

            List<String> katakana = Arrays.asList(
                    "ア", "イ", "ウ", "エ", "オ",
                    "カ", "キ", "ク", "ケ", "コ",
                    "サ", "シ", "ス", "セ", "ソ",
                    "タ", "チ", "ツ", "テ", "ト",
                    "ナ", "ニ", "ヌ", "ネ", "ノ",
                    "ハ", "ヒ", "フ", "ヘ", "ホ",
                    "マ", "ミ", "ム", "メ", "モ",
                    "ヤ", "ユ", "ヨ",
                    "ラ", "リ", "ル", "レ", "ロ",
                    "ワ", "ヲ", "ン"
            );

            Random random = new Random();
            Timer timer = new Timer(100, null); // 每 100 毫秒更新一次字符
            final long[] startTime = {0}; // 动画开始时间

            // 按钮点击事件
            startButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    startButton.setEnabled(false); // 禁用按钮
                    startTime[0] = System.currentTimeMillis(); // 记录开始时间

                    // 启动定时器
                    timer.addActionListener(new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            // 随机显示一个字符
                            boolean isHiragana = random.nextBoolean();
                            String randomChar = isHiragana ?
                                    hiragana.get(random.nextInt(hiragana.size())) :
                                    katakana.get(random.nextInt(katakana.size()));
                            characterLabel.setText(randomChar);

                            // 检查是否超过动画持续时间(3 秒)
                            if (System.currentTimeMillis() - startTime[0] >= 1000) {
                                timer.stop(); // 停止定时器
                                startButton.setEnabled(true); // 启用按钮
                            }
                        }
                    });
                    timer.start(); // 启动定时器
                }
            });

            // 显示窗口
            frame.setLocationRelativeTo(null); // 居中显示
            frame.setVisible(true);
        });
    }
}

http://www.kler.cn/a/594992.html

相关文章:

  • 共注意力机制及创新点深度解析
  • 【原创】通过S3接口将海量文件索引导入elasticsearch
  • VSCode中操作gitee
  • 27.巡风:企业内网漏洞快速应急与巡航扫描系统
  • Flutter 用户电话号码 中间显示*
  • 反射型(CTFHUB)
  • redis MISCONF Redis is configured to save RDB snapshots报错解决
  • 【Kafka】深入了解Kafka
  • C# MethodBase 类使用详解
  • acwing1295. X的因子链
  • CMake 函数和宏
  • 嵌入式软件单元测试的必要性、核心方法及工具深度解析
  • 在 Windows 系统下,将 FFmpeg 编译为 .so 文件
  • Touch Diver:Weart为XR和机器人遥操作专属设计的触觉反馈动捕手套
  • 对敏捷研发的反思,是否真是灵丹妙药?
  • HTTPS 加密过程详解
  • 【SpringBoot】MorningBox小程序的完整后端接口文档
  • 3.20【L】algorithm
  • 「Java EE开发指南」用MyEclipse开发EJB 3无状态会话Bean(一)
  • HTML5响应式使用css媒体查询