当前位置: 首页 > 知识库问答 >
问题:

在Java中获得一张快乐的脸

戴嘉珍
2023-03-14

我在显示图像文件src/happyFace时遇到问题。gif,在我的javagui中。目标是显示一张笑脸的图像,它似乎以一定角度滑过程序窗口,从窗口边缘反弹。

我认为我的问题在于src/panel中的image变量(类型ImageIcon)。java,因为ImageIcon类可能与将来的swing版本不兼容(根据Oracle文档:https://docs.oracle.com/javase/7/docs/api/javax/swing/ImageIcon.html)。如果这是真的,我认为swing库可能不支持ImageIcon类。我不知道如何检查我的swing库。

src/happyFace。gif

我的输出窗口

SRC/Rebound.java:

//********************************************************************
// Rebound.java Java Foundations
//********************************************************************
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Rebound{
//-----------------------------------------------------------------
// Displays the main frame of the program.
//-----------------------------------------------------------------
    public static void main (String[] args){
        JFrame frame = new JFrame ("Rebound");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new ReboundPanel());
        frame.pack();
        frame.setVisible(true);
    }
}

src/面板。爪哇:

//********************************************************************
// ReboundPanel.java Java Foundations
//
// Represents the primary panel for the Rebound program.
//********************************************************************
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ReboundPanel extends JPanel{
    private final int WIDTH = 300, HEIGHT = 100;
    private final int DELAY = 20, IMAGE_SIZE = 35;
    private ImageIcon image;
    private Timer timer;
    private int x, y, moveX, moveY;
    //-----------------------------------------------------------------
    // Sets up the panel, including the timer for the animation.
    //-----------------------------------------------------------------
    public ReboundPanel(){
        timer = new Timer(DELAY, new ReboundListener());
        image = new ImageIcon ("happyFace.gif");
        x = 0;
        y = 40;
        moveX = moveY = 3;
        setPreferredSize (new Dimension(WIDTH, HEIGHT));
        setBackground (Color.black);
        timer.start();
    }
    //-----------------------------------------------------------------
    // Draws the image in the current location.
    //-----------------------------------------------------------------
    public void paintComponent (Graphics page){
        super.paintComponent (page);
        image.paintIcon (this, page, x, y);
    }
    //*****************************************************************
    // Represents the action listener for the timer.
    //*****************************************************************
    private class ReboundListener implements ActionListener{
        //-----------------------------------------------------------------
        // Updates the position of the image and possibly the direction
        // of movement whenever the timer fires an action event.
        //-----------------------------------------------------------------
        public void actionPerformed (ActionEvent event){
            x += moveX;
            y += moveY;
            if (x <= 0 || x >= WIDTH-IMAGE_SIZE)
                moveX = moveX * -1;
            if (y <= 0 || y >= HEIGHT-IMAGE_SIZE)
                moveY = moveY * -1;
            repaint();
        }
    }
}

共有1个答案

通博实
2023-03-14

在类中,

更改image=newimageicon(“happyFace.gif”)

Image=new ImageIcon("src/Happy yFace.gif");

请注意,这种解决方案只能用于测试目的。正如安德鲁·汤普森的评论所述,存储和加载图像的正确方法是使用嵌入式资源。

 类似资料:
  • 问题内容: Date.getTime()返回自1970年1月1日以来的毫秒数。Unixtime为自1970年1月1日以来的秒数。我通常不使用Java编写代码,但是我正在进行一些错误修复。我有: 有没有更好的方法来在Java中获取unixtime? 问题答案: 避免使用创建Date对象。除以1000将使你进入Unix时代。 如注释中所述,对于变量的类型,通常希望使用基元长(小写l长)而不是盒装对象长

  • 我得到这个错误 Symfony\Component\Debug\Exception\fatalthrowable错误:传递给Illumb\Routing\Middleware\ThrottlereRequests::addHeaders()的参数1必须是Symfony\Component\HttpFoundation\Response的实例,给定为空, 当在Laravel 5.7的中间件中获取标题

  • 通常在我的内部循环中,我需要以“环绕”的方式对数组进行索引,因此(例如)如果数组大小为100,并且我的代码要求元素-2,那么应该给它元素98。在许多高级语言(如Python)中,只需使用就可以做到这一点,但由于某种原因,C的整数算术(通常)向零舍入,而不是一致地向下舍入,因此当给定负的第一个参数时,其模运算符返回负结果。 通常我知道不会小于,在这些情况下,我只是做。然而,有时这不能保证,对于这些情

  • 问题内容: 我如何获得年度的当前星期数,例如PHP的星期数? 它应该是ISO-8601的 星期数,从星期一开始的星期数。 问题答案: 在观察夏令时和1月1日是星期五的年份中,日期存在问题。通过使用所有UTC方法进行修复。以下代码将相同的结果返回给Moment.js。 创建“ UTC”日期时,小时为零。 最小化的原型版本(仅返回星期数): 测试部分 在本部分中,您可以输入YYYY-MM-DD格式的任

  • 问题内容: 在java中如何加载一张图片? 问题答案: 首先,更改此行: 对此: 可以在此线程上找到有关这两种方法之间的区别的更多信息 - 加载资源的不同方法 对于Eclipse: 如何将图像添加到项目中的资源文件夹 对于NetBeans: 在Java GUI应用程序中处理图像 如何将图像添加到项目 对于IntelliJ IDEA: 右键单击项目的src文件夹。选择新建->包 在“ 新建软件包对话

  • 问题内容: 众所周知,Java ArrayList是使用数组实现的,并以10的容量进行初始化,并将其大小增加50%。如何获得当前ArrayList的容量而不是ArrayList的大小。 谢谢 问题答案: 我认为这是不可能的。您的用例是什么?我相信C#ArrayLists具有属性,但是Java ArrayList类不会公开此信息。 您具有接受初始容量参数的构造函数,并且具有可用于减少增量重新分配量的