簡體   English   中英

嘗試在圖形中繪制圖像圖標,但無法正常工作

[英]Trying to draw an image icon in graphics but it wont work

我正在嘗試在圖形中繪制圖像圖標,但是由於某種原因我無法繪制圖像。 我想我做的所有事情都是正確的,我不知道為什么它不起作用。

我也嘗試從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();
      }

    }
}

首先,您需要將paintComponenet方法重命名為paintComponent ,以便覆蓋超類的paintComponenet方法。 名稱在覆蓋方法中非常重要。 正如安德魯·湯普森Andrew Thompson)建議的那樣,在您要覆蓋的方法之上添加@Override非常方便檢查簽名和錯別字。 子類中的方法必須具有與超類中的該方法相同的簽名才能覆蓋它。 只能增加訪問修飾符。

之后,如果您的圖片2.gifDirectionPanel類位於同一包中,則應在2.gif名稱前刪除/

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM