2016-05-24 3 views
0

グラフィックスで画像アイコンを描画しようとしていますが、何らかの理由で画像を描画できません。私はすべてが正しいと思っている、私はなぜそれが動作しないのか分からない。グラフィックスに画像アイコンを描画しようとしましたが動作しません

ImageIconからBufferedImageに変更しようとしましたが、動作しません。

提案がありますか?

package game; 

import javax.swing.JFrame; 

public class Main { 

    public static void main(String[] args) 
    { 

     JFrame frame = new JFrame ("Space Ship Game"); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new DirectionPanel()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

} 

そして

package game; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import javax.swing.ImageIcon; 
import javax.swing.JPanel; 
public class DirectionPanel extends JPanel 
{ 

    private final int WIDTH = 1300, HEIGHT = 900; 
    private final int JUMP = 10; 
    private final int IMAGE_SIZE = 31; 
    private ImageIcon spaceShipImage; 
    private int x, y; 

    public DirectionPanel() 
    { 
     addKeyListener (new DirectionListener()); 

     x = WIDTH /2; 
     y = HEIGHT /2; 

     try 
     { 
      spaceShipImage = new ImageIcon(getClass().getResource("/2.gif")); 
     } 
     catch (Exception e) 
     { 
      System.out.println("sss"); 
     } 
     setBackground(Color.BLACK); 
     setPreferredSize (new Dimension(WIDTH, HEIGHT)); 
     setFocusable(true); 
    } 

    public void paintComponenet (Graphics g) 
    { 
     super.paintComponent(g); 
     spaceShipImage.paintIcon(this, g, x, y); 
    } 

    private class DirectionListener extends KeyAdapter 
    { 

     public void keyPressed (KeyEvent event) 
     { 

     switch (event.getKeyCode()) 
     { 

      case KeyEvent.VK_UP: 
        System.out.println("Dsfdsf"); 
        y -= JUMP; 
       break; 
      case KeyEvent.VK_DOWN:    
       y += JUMP; 
       break; 
      case KeyEvent.VK_LEFT: 
       x -= JUMP; 
       break; 
      case KeyEvent.VK_RIGHT: 
       x += JUMP; 
       break; 
     } 

     repaint(); 
     } 

    } 
} 

答えて

3

あなたはスーパークラスのpaintComponenetメソッドをオーバーライドするためにpaintComponentにごpaintComponenetメソッドの名前を変更する必要がまず第一に:
これは私のコードです。名前はメソッドをオーバーライドする際に非常に重要です。 Andrew Thompsonは、オーバーライドしているメソッドの上に@Overrideを追加すると、署名とタイプミスをチェックするのが非常に便利です。子クラスのメソッドは、それをオーバーライドするためにスーパークラスのメソッドと同じシグネチャを持っていなければなりません。アクセス修飾子のみを増やすことができます。その後

あなたのイメージ2.gifがあなたのDirectionPanelクラスと同じパッケージに含まれている場合は、あなたの2.gifの名前の前に/を削除する必要があり、です。

Good Luck。

+1

* "名前はメソッドをオーバーライドする上で非常に重要です。" *これは '@ Override'表記が非常に便利なところです。 ;) –

+0

ありがとう、私はpain.Componenetで余分な 'e'を見ていない! –

+0

@Trying_To_Understand、チェックマークをクリックして回答を「受け入れる」ことを忘れないでください。人々は問題が解決されたことを知ります。 – camickr

関連する問題