Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何显示阵列中的图像?_Java_Swing - Fatal编程技术网

Java 如何显示阵列中的图像?

Java 如何显示阵列中的图像?,java,swing,Java,Swing,如何修复它以使图像显示? 我正在使用NetBeans 11.2 Java Gradle 我试图使汽车的图像向前推进。 弹出JPanel,但不显示任何图像!我花了很长时间想弄明白这一点。 没有显示错误消息 import javax.swing.*; import javax.swing.JFrame; import java.awt.*; import java.awt.event.*; public class Main extends JPanel implements ActionList

如何修复它以使图像显示? 我正在使用NetBeans 11.2 Java Gradle 我试图使汽车的图像向前推进。 弹出
JPanel
,但不显示任何图像!我花了很长时间想弄明白这一点。 没有显示错误消息

import javax.swing.*;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;

public class Main extends JPanel implements ActionListener {
    private final Timer animate;
    private final ImageIcon ImageArray[];
    private int delay = 50, FrameCount = 200, Currentframe = 0;

    public Main() {
        ImageArray = new ImageIcon[FrameCount];
        for (int i = 1; i < ImageArray.length; i++) {
            ImageArray[i] = new ImageIcon(getClass().getResource("Cartest (" + i + ").jpg"));
        }
        animate = new Timer(delay, this);
        animate.start();
    }

    public void paintConponent(Graphics g) {
        super.paintComponent(g);
        if (Currentframe >= ImageArray.length) {
            Currentframe = 0;
        }
        Currentframe++;
        ImageArray[Currentframe].paintIcon(this, g, 0, 0);
    }

    public void actionPerformed (ActionEvent e) {
        repaint();
    }

    public static void main (String args[]) {
        JFrame f= new JFrame("hello");
        Main s = new Main();
        f.add(s);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400,400);
    }
}
import javax.swing.*;
导入javax.swing.JFrame;
导入java.awt.*;
导入java.awt.event.*;
公共类Main扩展JPanel实现ActionListener{
私人最终定时器动画;
私有最终ImageIcon ImageArray[];
私有整数延迟=50,帧数=200,当前帧=0;
公用干管(){
ImageArray=新的ImageIcon[FrameCount];
对于(int i=1;i=ImageArray.length){
Currentframe=0;
}
Currentframe++;
ImageArray[Currentframe].paintIcon(this,g,0,0);
}
已执行的公共无效操作(操作事件e){
重新油漆();
}
公共静态void main(字符串参数[]){
JFrame f=新的JFrame(“你好”);
Main s=新的Main();
f、 添加(s);
f、 setVisible(真);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 设置大小(400400);
}
}

正如其他人指出的,您在
paintComponent
方法的名称中输入了一个错误。第二个问题是,由于line
currentFrame=0,您将得到一个
NullpointerException
(在第一次迭代之后),从索引1开始填充imageArray。 代码的
getResource
部分没有问题,因为如果找不到图像,它会在该行抛出异常

建议: 重写超类方法时,请使用
Override
注释。如果您输入错误,编译器将开始抱怨注释的错误使用

这个答案并不一定说明如何做事。但它确实可以让您的代码正常工作:

import javax.swing.*;
import javax.swing.JFrame;
import java.awt.event.*;

public class Main extends JPanel implements ActionListener {

    private final Timer animate;
    private final ImageIcon imageArray[];
    private int delay = 50, frameCount = 200, currentFrame = 0;

    public Main() {

        imageArray = new ImageIcon[frameCount];


        for (int i = 1; i < imageArray.length; i++) {

            imageArray[i] = new ImageIcon(getClass().getResource("Cartest (" + i + ").jpg"));

        }

        animate = new Timer(delay, this);
        animate.start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        currentFrame++;
        if (currentFrame == imageArray.length) {
            currentFrame = 1;
        }

        imageArray[currentFrame].paintIcon(this, g, 0, 0);
    }

    public static void main (String args[]) {
        JFrame f= new JFrame("hello");
        Main s = new Main();
        f.add(s);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400,400);
    }

}
import javax.swing.*;
导入javax.swing.JFrame;
导入java.awt.event.*;
公共类Main扩展JPanel实现ActionListener{
私人最终定时器动画;
私有最终ImageIcon imageArray[];
私有整数延迟=50,帧数=200,当前帧=0;
公用干管(){
imageArray=新的ImageIcon[frameCount];
对于(int i=1;i
正如其他人指出的,您在
paintComponent
方法的名称中输入了一个错误。第二个问题是,由于line
currentFrame=0,您将得到一个
NullpointerException
(在第一次迭代之后),从索引1开始填充imageArray。 代码的
getResource
部分没有问题,因为如果找不到图像,它会在该行抛出异常

建议: 重写超类方法时,请使用
Override
注释。如果您输入错误,编译器将开始抱怨注释的错误使用

这个答案并不一定说明如何做事。但它确实可以让您的代码正常工作:

import javax.swing.*;
import javax.swing.JFrame;
import java.awt.event.*;

public class Main extends JPanel implements ActionListener {

    private final Timer animate;
    private final ImageIcon imageArray[];
    private int delay = 50, frameCount = 200, currentFrame = 0;

    public Main() {

        imageArray = new ImageIcon[frameCount];


        for (int i = 1; i < imageArray.length; i++) {

            imageArray[i] = new ImageIcon(getClass().getResource("Cartest (" + i + ").jpg"));

        }

        animate = new Timer(delay, this);
        animate.start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        currentFrame++;
        if (currentFrame == imageArray.length) {
            currentFrame = 1;
        }

        imageArray[currentFrame].paintIcon(this, g, 0, 0);
    }

    public static void main (String args[]) {
        JFrame f= new JFrame("hello");
        Main s = new Main();
        f.add(s);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400,400);
    }

}
import javax.swing.*;
导入javax.swing.JFrame;
导入java.awt.event.*;
公共类Main扩展JPanel实现ActionListener{
私人最终定时器动画;
私有最终ImageIcon imageArray[];
私有整数延迟=50,帧数=200,当前帧=0;
公用干管(){
imageArray=新的ImageIcon[frameCount];
对于(int i=1;i
这是设置汽车图像动画的一种方法。OP没有提供汽车图像,所以我创建了一个

这是我创建的GUI。汽车从右向左行驶

我在创建Swing应用程序时使用该模式。这个模型强制分离关注点,并允许我一次只关注Swing应用程序的一部分

所以,我做的第一件事就是创建一个
Car
类。
Car
类保存图像的位置和图像本身

通常,在Swing应用程序中,首先读取所有资源,然后创建GUI。如果阅读参考资料需要一段时间