基于Java事件监听编写一个中秋猜灯谜小游戏

 更新时间:2023年09月13日 09:10:24   作者:随身电源  
众所周知,JavaSwing是Java中关于窗口开发的一个工具包,可以开发一些窗口程序,然后由于工具包的一些限制,导致Java在窗口开发商并没有太多优势,不过,在JavaSwing中关于事件的监听机制是我们需要重点掌握的内容,本文将基于Java事件监听编写一个中秋猜灯谜小游戏

何为事件监听

在Java中,事件监听(Event Listening)是一种处理用户交互的机制。通过事件监听,你的程序可以在用户进行某些操作(如点击按钮、输入文本、移动鼠标等)时执行特定的任务。

事件监听通常涉及三个组成部分:

  • 事件源:这是产生事件的组件。例如,一个按钮、一个文本框、一个菜单等都可以是事件源。
  • 事件:这是用户与事件源交互的动作。例如,点击、键入、鼠标移动等。每个事件类型都有一个对应的Java类,例如ActionEventKeyEvent等。
  • 事件监听器:这是一个特殊的类,用于处理事件。你需要创建一个实现了特定事件监听器接口的类,并覆盖其中的方法以定义当事件发生时要执行的操作。例如,如果你想要在用户点击按钮时显示一条消息,你可以创建一个实现ActionListener接口的类,并在actionPerformed方法中显示消息。

事件监听的工作原理是:你将事件监听器注册到事件源上,当用户与事件源交互时,Java运行环境会自动调用相应的事件监听器处理事件。

当然了,以上是官方的一些概念,一如既往地晦涩难懂,简单点说,就是你在点击窗口中的一些操作按钮时,Java程序是如何知道你点击了它们呢?其中就用到了一些回调方法,当你点击按钮的时候,便会调用这些回调方法,此时Java程序便知道你点击了某个按钮,接下来就可以进行程序的下一步操作。

比如下面的一个程序:

public class Example {
    public static void main(String[] args) {
        JFrame frame = new JFrame("事件监听");
        frame.setLocationRelativeTo(null); 
        JButton button = new JButton("点我试试!");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "你真点啊");
            }
        });
        frame.getContentPane().add(button);
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

在这个程序中,我们创建了一个窗口,并在窗口中添加了一个按钮,此时通过调用addActionListener给按钮添加了一个点击事件,其中有回调方法actionPerformed,当点击按钮时便会调用它,我们来试一试:

现在点击它:

这样一个点击事件的监听就完成了。

具体的执行流程如下图:

动手实现一个猜灯谜小游戏

现在我们就可以用所学知识做一个简单的猜灯谜小游戏了,首先我们设计一下窗体:

我们可以做的简单点,将题目显示在出题框里,然后点击提交按钮提交答案,此时弹出输入框,下一题可以切换题目,先把窗体画出来:

public LanternRiddlesGame() {
    super("猜灯谜小游戏");
    // 创建标签和按钮
    riddleLabel = new JLabel(riddles[currentRiddleIndex]);
    submitButton = new JButton("提交");
    nextButton = new JButton("下一题");
    // 添加按钮监听器
    submitButton.addActionListener(this);
    nextButton.addActionListener(this);
    // 设置布局和组件位置大小
    setLayout(new FlowLayout());
    setSize(400, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null); // 居中显示
    add(riddleLabel);
    add(submitButton);
    add(nextButton);
    setVisible(true);
}

那么接下来的步骤就非常简单了,对里面的控件进行事件的监听:

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == submitButton) {
        // 处理提交答案逻辑
        String userAnswer = JOptionPane.showInputDialog("请输入你的答案:");
        if (userAnswer.equalsIgnoreCase(answers[currentRiddleIndex])) {
            JOptionPane.showMessageDialog(this, "回答正确!");
        } else {
            JOptionPane.showMessageDialog(this, "回答错误!");
        }
    } else if (e.getSource() == nextButton) {
        // 处理下一题逻辑
        currentRiddleIndex++;
        if (currentRiddleIndex < riddles.length) {
            riddleLabel.setText(riddles[currentRiddleIndex]);
        } else {
            JOptionPane.showMessageDialog(this, "已经没有更多题目了!");
        }
    }
}

然后准备一下灯谜的素材,最后代码如下:

public class LanternRiddlesGame extends JFrame implements ActionListener {
    private JLabel riddleLabel;
    private JButton submitButton;
    private JButton nextButton;
    private String[] riddles = {
            "铁公鸡一毛不拔",
            "头上有青天",
            "纸上谈兵"
    };
    private String[] answers = { "一丝不苟", "高瞻远瞩", "言之无物" };
    private int currentRiddleIndex = 0;
    public LanternRiddlesGame() {
        super("猜灯谜小游戏");
        // 创建标签和按钮
        riddleLabel = new JLabel(riddles[currentRiddleIndex]);
        submitButton = new JButton("提交");
        nextButton = new JButton("下一题");
        // 添加按钮监听器
        submitButton.addActionListener(this);
        nextButton.addActionListener(this);
        // 设置布局和组件位置大小
        setLayout(new FlowLayout());
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null); // 居中显示
        add(riddleLabel);
        add(submitButton);
        add(nextButton);
        setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == submitButton) {
            // 处理提交答案逻辑
            String userAnswer = JOptionPane.showInputDialog("请输入你的答案:");
            if (userAnswer.equalsIgnoreCase(answers[currentRiddleIndex])) {
                JOptionPane.showMessageDialog(this, "回答正确!");
            } else {
                JOptionPane.showMessageDialog(this, "回答错误!");
            }
        } else if (e.getSource() == nextButton) {
            // 处理下一题逻辑
            currentRiddleIndex++;
            if (currentRiddleIndex < riddles.length) {
                riddleLabel.setText(riddles[currentRiddleIndex]);
            } else {
                JOptionPane.showMessageDialog(this, "已经没有更多题目了!");
            }
        }
    }
    public static void main(String[] args) {
        new LanternRiddlesGame();
    }
}

来看看效果:

点击提交按钮进行答题:

此时回答正确:

点击下一题可以切换题目,这样一个简单的猜灯谜小游戏就制作完成了。

马上也要到中秋和国庆的日子了,在这里也提前祝各位读者朋友中秋节快乐!

以上就是基于Java事件监听编写一个中秋猜灯谜小游戏的详细内容,更多关于Java编写中秋猜灯谜的资料请关注脚本之家其它相关文章!

相关文章

  • apache ant进行zip解压缩操作示例分享

    apache ant进行zip解压缩操作示例分享

    本文主要介绍了使用apache ant进行zip解压缩操作的方法,可以解决中文编码和首层父类无法创建问题,需要的朋友可以参考下
    2014-02-02
  • spring中@value注解需要注意的问题

    spring中@value注解需要注意的问题

    本篇文章主要介绍了spring中@value注解需要注意的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • java学习DongTai被动型IAST工具部署过程

    java学习DongTai被动型IAST工具部署过程

    被动型IAST被认为是DevSecOps测试阶段实现自动化安全测试的最佳工具,而就在前几天,洞态IAST正式开源了,这对于甲方构建安全工具链来说,绝对是一个大利好
    2021-10-10
  • SpringBoot实现jsonp跨域通信的方法示例

    SpringBoot实现jsonp跨域通信的方法示例

    这篇文章主要介绍了SpringBoot实现jsonp跨域通信的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • IntelliJ IDEA快速创建getter和setter方法

    IntelliJ IDEA快速创建getter和setter方法

    这篇文章主要介绍了IntelliJ IDEA快速创建getter和setter方法,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Java打包之后读取Resources下的文件失效原因及解决方法

    Java打包之后读取Resources下的文件失效原因及解决方法

    这篇文章主要给大家介绍了Java打包之后读取Resources下的文件失效的问题分析和解决方法,文中通过代码示例和图文结合给大家讲解非常详细,需要的朋友可以参考下
    2023-12-12
  • 解决mybatisPlus 中的field-strategy配置失效问题

    解决mybatisPlus 中的field-strategy配置失效问题

    这篇文章主要介绍了解决mybatisPlus 中的field-strategy配置失效问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Spring AOP源码深入分析

    Spring AOP源码深入分析

    这篇文章主要介绍了Spring AOP源码,AOP(Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充
    2023-01-01
  • SpringBoot中读取jar包中的resources目录下的文件的三种方式

    SpringBoot中读取jar包中的resources目录下的文件的三种方式

    这篇文章给大家总结了SpringBoot读取 jar 包中的 resources 目录下的文件的三种方式,文中有详细的代码示例供大家参考,,需要的朋友可以参考下
    2023-06-06
  • Java实现将每日新闻添加到自己博客中

    Java实现将每日新闻添加到自己博客中

    这篇文章主要为大家详细介绍了Java如何实现将每日新闻添加到自己博客中并发送到微信群中,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12

最新评论