如何在Java/Swing中使用JLabel制作动画?

2024-01-08

我有一个Java课程的期末项目,它是青蛙跳跃游戏。这是描述它的视频:

https://www.youtube.com/watch?v=NxWWP9cK24o https://www.youtube.com/watch?v=NxWWP9cK24o

我不知道如何使用Timer,我只知道Thread.sleep。但这不起作用。

这是我的代码:

import java.awt.event.ActionListener;
import javax.swing.Timer;




/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author gamekvnn
 */
public class FrogGame extends javax.swing.JFrame {
    /**
     * Creates new form ba
     */

    public FrogGame() {
        initComponents();
    }
        Timer time;
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        frog1 = new javax.swing.JLabel();
        frog2 = new javax.swing.JLabel();
        frog3 = new javax.swing.JLabel();
        fr0g2 = new javax.swing.JLabel();
        fr0g1 = new javax.swing.JLabel();
        fr0g3 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        background = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setLayout(null);

        frog1.setIcon(new javax.swing.ImageIcon("/home/gamekvnn/NetBeansProjects/Project/src/frog1.png")); // NOI18N
        jPanel1.add(frog1);
        frog1.setBounds(10, 310, 80, 80);

        frog2.setIcon(new javax.swing.ImageIcon("/home/gamekvnn/NetBeansProjects/Project/src/frog1.png")); // NOI18N
        jPanel1.add(frog2);
        frog2.setBounds(110, 310, 80, 80);

        frog3.setIcon(new javax.swing.ImageIcon("/home/gamekvnn/NetBeansProjects/Project/src/frog1.png")); // NOI18N
        jPanel1.add(frog3);
        frog3.setBounds(210, 310, 80, 80);

        fr0g2.setIcon(new javax.swing.ImageIcon("/home/gamekvnn/NetBeansProjects/Project/src/frog2.png")); // NOI18N
        jPanel1.add(fr0g2);
        fr0g2.setBounds(510, 310, 80, 80);

        fr0g1.setIcon(new javax.swing.ImageIcon("/home/gamekvnn/NetBeansProjects/Project/src/frog2.png")); // NOI18N
        jPanel1.add(fr0g1);
        fr0g1.setBounds(610, 310, 80, 80);

        fr0g3.setIcon(new javax.swing.ImageIcon("/home/gamekvnn/NetBeansProjects/Project/src/frog2.png")); // NOI18N
        jPanel1.add(fr0g3);
        fr0g3.setBounds(410, 310, 80, 80);

        jButton1.setText("Start");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton1);
        jButton1.setBounds(520, 20, 100, 29);

        background.setIcon(new javax.swing.ImageIcon("/home/gamekvnn/NetBeansProjects/Project/src/UZKEjzG.png")); // NOI18N
        jPanel1.add(background);
        background.setBounds(0, 0, 710, 440);
        background.getAccessibleContext().setAccessibleName("background");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 708, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 442, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:

        frog3.setLocation(frog3.getX()+100, frog3.getY());
        repaint();
        try {
            Thread.sleep(100);;                 //1000 milliseconds is one second.
        } catch(InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
        fr0g3.setLocation(fr0g3.getX()-200, fr0g3.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        fr0g2.setLocation(fr0g2.getX()-100, fr0g2.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        frog3.setLocation(frog3.getX()+200, frog3.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        frog2.setLocation(frog2.getX()+200, frog2.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        frog1.setLocation(frog1.getX()+100, frog1.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        fr0g3.setLocation(fr0g3.getX()-200, fr0g3.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        fr0g2.setLocation(fr0g2.getX()-200, fr0g2.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        fr0g1.setLocation(fr0g1.getX()-200, fr0g1.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        frog3.setLocation(frog3.getX()+100, frog3.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        frog2.setLocation(frog2.getX()+200, frog2.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        frog1.setLocation(frog1.getX()+200, frog1.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        fr0g2.setLocation(fr0g2.getX()-100, fr0g2.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        fr0g1.setLocation(fr0g1.getX()-200, frog1.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        frog1.setLocation(frog1.getX()+100, frog1.getY());
        repaint();
        try {
            Thread.sleep(100);;
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(FrogGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(FrogGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(FrogGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(FrogGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new FrogGame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JLabel background;
    private javax.swing.JLabel fr0g1;
    private javax.swing.JLabel fr0g2;
    private javax.swing.JLabel fr0g3;
    private javax.swing.JLabel frog1;
    private javax.swing.JLabel frog2;
    private javax.swing.JLabel frog3;
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration                   
}

,我只知道Thread.sleep

嗯,这是行不通的,因为代码正在执行Event Dispatch Thread (EDT)这是重绘 GUI 的线程。因此,如果你一直告诉它睡觉,就永远没有机会重新粉刷自己。

所以如果你想使用Thread.sleep,你需要启动一个单独的Thread。

阅读 Swing 教程中的部分并发性 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html了解更多信息。也许您还可以使用 SwingWorker,如工作线程教程中讨论的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Java/Swing中使用JLabel制作动画? 的相关文章

  • 如何重复一段文本中的每个字母?爪哇语

    就像在口吃中一样 如果文本为 dean 并且乘数为 3 则结果将是 dddeeeaaannn 由提供的乘数指定的次数 public static void repeatLetters String text dean int n 3 Str
  • 二元运算符 >=、-、* 的错误操作数类型

    我无法弄清楚如何修复代码中不断出现的这些错误 import java util Scanner public class Unit02Prog1 public static void main String args Scanner inp
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • 如何杀死 Java Future?

    我正在开发的服务使用 Future 来并行运行多个任务 每个任务最多可能需要一分钟才能完成 然而 外部库似乎有问题 因为在某些情况下 2 的时间 它不会返回 在这些情况下 我想给出 2 分钟的等待时间 如果还没有返回 我想杀死 future
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 使用 https 的 Web 服务身份验证给出错误

    我编写了一个简单的 Web 服务 并使用摘要和 HTTPS 身份验证来保护它 我已经使用 Java 中的 keytool 生成了我的证书 当我通过创建 war 文件在 Tomcat 中部署 Web 服务时 axis 的欢迎页面正确显示 但是
  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • Spring 从 JBoss 上下文加载 PropertySourcesPlaceholderConfigurer

    我有一个使用 PropertySourcesPlaceholderConfigurer 的 spring 3 1 应用程序加载设置 我想管理测试和生产环境 只需从服务器上下文加载设置覆盖本地文件属性中指定的设置 下一个示例在 Tomcat
  • 递归取消 allOf CompletableFuture

    如果我有 CompletableFuture
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • java.exe 以非零退出值 1 结束

    只是为了开始 我并不是真正尝试从 Android 中的 xlsx 文件中读取单元格 我已经尝试了几乎所有我在 Google 上搜索到的内容 但是每次 在两台不同的 PC 上 都是 Java 1 7 0 79 当我尝试构建 运行 这个应用程序
  • 如何获取 JDBC 中 UPDATE 查询影响的所有行?

    我有一项任务需要使用更新记录PreparedStatement 一旦记录被更新 我们知道更新查询返回计数 即受影响的行数 但是 我想要的不是计数 而是受更新查询影响的行作为响应 或者至少是受影响的行的 id 值列表 这是我的更新查询 UPD
  • 在约束验证器中使用 Guice 进行依赖注入

    我有一个在 ConstraintValidator 的实现中注入类的用例 我正在使用 Google guice 进行依赖项注入 目前无法在验证器内注入 我的场景的简化形式 内部模块 Provides Singleton public Ser
  • 在 Eclipse RCP 应用程序中禁用插件贡献

    我经常遇到这个问题 但尚未找到解决方案 每当我编写一个新的基于 Eclipse RCP 的应用程序并包含来自 Eclipse 平台的插件时 我都会 继承 其中一些插件的 UI 贡献 大多数贡献 菜单项 键盘快捷键 属性页 都很有用 但有时我
  • 如何在 JASPIC 中保存经过身份验证的用户?

    我开发了一个安全认证模块 SAM 并实现了validateRequest方法 我还有一个简单的 Web 应用程序配置为使用此 SAM In my validateRequest方法 我检查 clientSubject 并设置一个Caller
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • 如何在一次操作中使用 Thymeleaf 检查 null 和空条件?

    有什么方法可以检查 Thymeleaf 中的 null 和empty 条件吗 方法一 1 variable1 variable2 variable3 2 variable null 3 variable 如果我们结合两个条件 例如 vari
  • 在 Spring MVC 中将请求写入文件

    我希望能够将整个请求写入 Spring MVC 控制器中的文件 我已尝试以下操作 但即使我使用大量参数发出 POST 请求 文件也始终为空 RequestMapping method RequestMethod POST value pay
  • 如何在不使用 -cp 开关的情况下在 Groovy 中自动加载数据库 jar?

    我想简化调用 Oracle 数据库的 Groovy 脚本的执行 如何将 ojdbc jar 添加到默认类路径以便我可以运行 groovy RunScript groovy 代替 groovy cp ojdbc5 jar RunScript

随机推荐

  • PHP GD:图像无法显示,因为它包含错误

    我尝试通过 PHP GD 制作验证码 但不幸的是我遇到了一个问题 PHP 告诉我 The image http 127 0 0 1 par php cannot be displayed because it contains errors
  • 如何在 Visual Studio 中(重新)启用实时 CSS 编辑?

    在 Visual Studio 2015 中 创建一个新的空 C ASP NET Web 应用程序 Framework 4 6 Add WebForm1 aspx div Hello World div Add mycss css div
  • Twilio Node.js - 在 statusCallback 中获取会议参与者详细信息

    我试图能够更新呼叫以将其拨入会议 然后我想跟踪会议中的电话号码 在更新呼叫之前我已经有了电话号码 所以我的计划是将其作为参数添加到 statusCallback 中 然后当有人加入时 我会知道哪个电话号码已加入 或离开 这是我用来将呼叫更新
  • __init__() 缺少 1 个必需的位置参数:'get_response'

    我使用 Django 1 11 并收到此错误 class TenantMiddleware def init self get response self get response get response def call self re
  • 如何在不位于模型文件夹中的情况下创建普通帆模型

    So 我正在为我的应用程序实现一个插件 api 并且插件可以有自己的模型 想象一下 SimplePlugin pluginName simple pluginConfig SimpleModel attributes name string
  • D3 序数尺度仅返回极值。为什么不在范围和域之间进行插值?

    我正在尝试使用d3 scale ordinal 我遇到一个问题 该函数仅返回最小和最大比例值 我正在尝试使用 d3 map 来构建域 然后我对相同的值使用 xScale 函数 我的数据如下所示 key to state value type
  • 上传文件和从 FTP 下载文件

    我正在尝试制作一个上传 下载的程序 exe文件到一个FTP 我尝试使用FtpWebRequest 但我只成功上传和下载 txt文件 然后我在这里找到了一个使用下载的解决方案WebClient WebClient request new We
  • UITableView 在编辑时 didSelectRow 吗?

    我正在构建一个非常类似于内置天气应用程序的翻转视图或编辑模式下时钟应用程序的闹钟视图的界面 表视图始终处于编辑模式 因此删除图标出现在每个单元格的左侧 当表视图处于编辑模式时 我的代表不会收到didSelectRowAtIndexPath通
  • 如何将所有activiti部​​署的bpmn文件转换为camunda?

    在camunda和activiti中 部署的文件存储在 ACT GE BYTEARRAY 表中 bpmn文件插入到blob列 bytes 中 我想将所有 activiti 部署的 bpmn 文件转换为 camunda 最好的方法是什么 Be
  • 在 tkinter 中显示 Pandas 数据框

    我正在创建一个 tkinter gui 它将接受用户输入的变量 然后将其传递给 SQL 和查询的数据 在本例中为单列数据框和箱线图 然而 目前我找不到在 tk gui 中显示我的 pandas 数据框的方法 我还没有找到任何模块或方法来显示
  • 计算坐标列表之间的地理距离(纬度、经度)

    我正在编写一个 Flask 应用程序 使用从 GPS 传感器提取的一些数据 我能够在地图上绘制路线 并且想要计算 GPS 传感器行驶的距离 一种方法可能是只获取开始和结束坐标 但是由于传感器的移动方式 这是非常不准确的 因此 我对每 50
  • 使用 Powershell 编辑 XML 属性

    因此 我有一个 exe config 文件 我试图在其中搜索特定属性 然后使用 Windows 7 中的 Powershell 版本 4 0 对其进行编辑 但我遇到了问题 我尝试了几件事 但没有取得任何成功 这是我正在使用的配置文件的精简版
  • 秒表逻辑

    我想在android中开发一个简单的秒表逻辑 单击列表视图时 计时器应启动 单击按钮时 计时器应停止 任何人都可以指导我吗 任何示例代码都会有很大帮助 使用跑表 https github com cgoldberg netplot blob
  • 如何改进这个排序代码? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • SQL Server 2008在生产环境中表现如何?

    我正要移动服务器 我正在和某人交谈 他们建议使用服务器上安装的 sql server express 2008 我可以完全访问服务器 这个 Express 引擎的工作速度 性能 与真正的 sql server 2008 相同吗 我知道限制
  • 如何从 sqlite 数据库填充可扩展列表视图

    我引用了一些链接 但没有得到好东西 我在 sqlite 中有一张表 有 4 列 id 菜单名称 描述 金额 我希望 menu name 应该是父级 描述和金额应该是从数据库填充的子级 当我单击特定的 menu name 时 它 应该展开并显
  • 在批处理文件参数中保留“=”(等号)字符

    我编写了一个批处理文件来启动应用程序 该应用程序不是我的 我无法修改它 批处理文件本身接受一些参数 应用程序接受其他参数 批处理文件使用 SHIFT 使用其所有选项 然后使用正确的环境启动应用程序 并将其余参数传递给应用程序 调用批处理文件
  • 将 javascript 注入 javascript 函数

    我有一个奇怪的问题 我需要将一些 javascript 注入到另一个 javascript 函数中 我正在使用一个已锁定的框架 因此我无法更改现有功能 我得到的是这样的东西 function doSomething 我可以操纵 上面 但是我
  • 在我的 Java 应用程序中添加 Web 浏览器

    我有一个java应用程序 用于查看网络内容 所以我想在我的应用程序中添加一个功能齐全的浏览器 我已经尝试过了JEditorPane并且它不处理动态内容 还有其他办法吗 有关如何做的任何帮助吗 这个链接是很好的例子 在 swing 中创建浏览
  • 如何在Java/Swing中使用JLabel制作动画?

    我有一个Java课程的期末项目 它是青蛙跳跃游戏 这是描述它的视频 https www youtube com watch v NxWWP9cK24o https www youtube com watch v NxWWP9cK24o 我不