Java 如何显示阵列中的图像?
如何修复它以使图像显示? 我正在使用NetBeans 11.2 Java Gradle 我试图使汽车的图像向前推进。 弹出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
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
方法的名称中输入了一个错误。第二个问题是,由于linecurrentFrame=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
方法的名称中输入了一个错误。第二个问题是,由于linecurrentFrame=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。如果阅读参考资料需要一段时间