2014-02-14 3 views
1

У меня есть код, который должен делать анимацию игрока, ходить, но по какой-то причине он не работает. Это мой код:Анимация изображения .GIF на JPanel

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(): 
} 

Кроме того, вы должны называть super.paintComponent(g) в методе paintComponent, а также хорошо использовать практику @Override аннотаций при необходимости

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

Side Примечание

  • При окрашивании на JPanel вы должны переопределить getPreferredSize(), который даст предпочтительный размер JPanel, то вы можете просто pack() ваш кадр, который вы должны делать.

    @Override 
    public Dimension getPreferredSize() { 
        return new Dimension(400, 400); 
    } 
    
  • Также paintComponent должны быть protected и не public

+0

Спасибо! Это сработало! – XBullet123

+2

'ImageIO' - не лучший способ загрузить ** анимированный GIF **. См. [Этот вопрос и вопрос] (http://stackoverflow.com/q/10836832/418556) для получения дополнительной информации. –

 Смежные вопросы

  • Нет связанных вопросов^_^