2014-02-14 96 views
1

我有一些代碼應該讓播放器變成動畫,走路,但由於某種原因,它不起作用。這是我的代碼:動畫JPanel上的.GIF圖像

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

作爲一個說明調用'super.paintComponent方法()'在該重寫方法 – nachokk

+0

第一線什麼不起作用?圖像不顯示? –

+0

是的,它不顯示任何東西只是一個空框架 – XBullet123

回答

1

「player.gif文件在一個文件中是兩張圖片,並保存在與java文件相同的目錄中。」

圖像應該從類路徑加載。將字符串傳遞給ImageIcon將從文件系統加載圖像,在這種情況下,您的路徑不會工作。

要在類路徑中加載只是這樣做

ImageIcon img = new ImageIcon(getClass().getResource("player.gif")); 

只要你的文件是在同一個包中的java文件如你所描述的圖像應該得到內置到類路徑。

您還可以使用ImageIO類讀取圖像,這將拋出一個異常,如果圖像無法加載,這將拋出一個FileNotFoundException所以你知道你的道路是錯誤的

Image img; 
try { 
    img = ImageIO.read(getClass().getResource("player.gif")); 
} catch (IOException ex) { 
    ex.printStackTrace(): 
} 

此外,你應該在你的paintComponent方法調用super.paintComponent(g),和好的做法用@覆蓋批註必要時

@Override 
protected void paintComponent(Graphics graphics) { 
    super.paintComponent(graphics); 

旁註

  • JPanel繪畫,你應該重寫getPreferredSize()這將給JPanel較好大小,那麼你可以pack()你的框架,您應該做。

    @Override 
    public Dimension getPreferredSize() { 
        return new Dimension(400, 400); 
    } 
    
  • 而且paintComponentprotected而不是public

+0

謝謝!這工作! – XBullet123

+2

'ImageIO'不是加載**動畫GIF **的最佳方式。有關詳細信息,請參閱[本問答](http://stackoverflow.com/q/10836832/418556)。 –