我有一些代码应该让玩家有动画,走路,但由于某种原因它不起作用。这是我的代码:
import javax.swing.*;
import java.awt.*;
/**
* Created by evengultvedt on 14.02.14.
*/
import javax.swing.*;
import java.awt.*;
//The board class, which the drawing is on
class Board extends JPanel {
//The image of the player
private Image imgPlayer;
public Board() {
setPreferredSize(new Dimension(400, 400));
setBackground(Color.WHITE);
setVisible(true);
//getting the player.gif file
ImageIcon player = new ImageIcon("player.gif");
//and put in the imgPlayer variable
imgPlayer = player.getImage();
}
public void paintComponent(Graphics graphics) {
Graphics2D graphics2D = (Graphics2D) graphics;
//this doesn't work
graphics2D.drawImage(imgPlayer, 10, 10, 100, 100, null);
//this works
graphics2D.drawString("Test drawing", 120, 120);
}
}
//The JFrame to put the panel on
class AnimatePlayer extends JFrame{
public AnimatePlayer() {
Board board = new Board();
add(board);
setTitle("PlayerTestAnimation");
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400, 400);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new AnimatePlayer();
}
});
}
}
player.gif文件是一个文件中的两张图片,并保存在与java文件相同的目录中。
感谢任何帮助,谢谢。我很抱歉只发布代码,但我不知道你需要什么更多的信息。请问是否有什么。
答案 0 :(得分:1)
“player.gif文件是一个文件中的两张图片,并保存在与java文件相同的目录中。”
应该从类路径加载图像。将字符串传递给ImageIcon
会从文件系统中加载图像,在这种情况下,您的路径将无法正常工作。
要从类路径加载,只需执行此操作
ImageIcon img = new ImageIcon(getClass().getResource("player.gif"));
只要您的文件与您所描述的.java文件位于同一个包中,图像就会嵌入到您的类路径中。
您还可以使用ImageIO
类来读取图像,如果无法加载图像会抛出异常,这会抛出FileNotFoundException
,因此您知道路径错误< / p>
Image img;
try {
img = ImageIO.read(getClass().getResource("player.gif"));
} catch (IOException ex) {
ex.printStackTrace():
}
此外,您应该在super.paintComponent(g)
方法中调用paintComponent
,并且在必要时使用@Override注释作为好的做法
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
旁注
在JPanel
上绘画时,您应该覆盖getPreferredSize()
,这会为JPanel
提供首选尺寸,那么您只需pack()
您的框架{<1}} em>应该正在做。
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
同样paintComponent
应该是protected
而不是public