【问题标题】:Trying to draw an image icon in graphics but it wont work试图在图形中绘制图像图标,但它不起作用
【发布时间】:2016-05-24 12:23:32
【问题描述】:

我正在尝试在图形中绘制图像图标,但由于某种原因我无法绘制图像。我想我做的一切都是正确的,我不知道为什么它不起作用。

我也试过从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();
      }

    }
}

【问题讨论】:

    标签: java swing


    【解决方案1】:

    首先,您需要将paintComponenet 方法重命名为paintComponent 以覆盖超类的paintComponent 方法。名称在覆盖方法中非常重要。正如 Andrew Thompson 建议的那样,在您要覆盖的方法之上添加 @Override 非常方便检查签名和拼写错误。子类中的方法必须与超类中的该方法具有相同的签名才能覆盖它。只能增加访问修饰符。

    之后,如果您的图像 2.gif 与您的 DirectionPanel 类位于同一包中,则应删除 2.gif 名称前的 /

    祝你好运。

    【讨论】:

    • “名称在重写方法中非常重要。” 这就是@Override 符号非常方便的地方。 ;)
    • 非常感谢,我没有看到 painComponenet 中多余的“e”!
    • @Trying_To_Understand,不要忘记点击复选标记“接受”答案,这样人们就知道问题已经解决了。
    • 也许你知道如何借助图形功能删除图像的白色背景?
    • 感谢@AndrewThompson 的提示,我将编辑答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2016-02-24
    • 2016-01-16
    相关资源
    最近更新 更多