Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图在图形中绘制图像图标,但无法正常工作_Java_Swing - Fatal编程技术网

Java 试图在图形中绘制图像图标,但无法正常工作

Java 试图在图形中绘制图像图标,但无法正常工作,java,swing,Java,Swing,我试图在图形中绘制图像图标,但由于某些原因,我无法绘制图像。我想我做的每件事都是正确的,我不知道为什么它不起作用 我还尝试将ImageIcon更改为BufferedImage,但它也不起作用 有什么建议吗? 这是我的代码: package game; import javax.swing.JFrame; public class Main { public static void main(String[] args) { JFrame frame = new

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

我还尝试将
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);
  }

}


首先,您需要将
paintComponenet
方法重命名为
paintComponent
,以覆盖超类的
paintComponenet
方法。名称在重写方法中非常重要。正如安德鲁·汤普森(Andrew Thompson)所建议的,在覆盖的方法之上添加
@Override
,这对于检查签名和打字非常方便。子类中的方法必须与超类中的方法具有相同的签名才能重写它。只有访问修饰符可以增加

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


祝您好运。

首先,您需要将
paintComponenet
方法重命名为
paintComponent
,以覆盖超类的
paintComponenet
方法。名称在重写方法中非常重要。正如安德鲁·汤普森(Andrew Thompson)所建议的,在覆盖的方法之上添加
@Override
,这对于检查签名和打字非常方便。子类中的方法必须与超类中的方法具有相同的签名才能重写它。只有访问修饰符可以增加

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


祝你好运。

“名称在重写方法中非常重要。”这就是
@Override
符号非常方便的地方非常感谢,我没有在painComponenet中看到额外的“e”@试图理解,别忘了点击复选标记“接受”答案,让人们知道问题已经解决。也许你知道如何借助图形功能删除图像的白色背景?谢谢@AndrewThompson的提示,我会编辑答案。“名称在覆盖方法中非常重要。”这就是
@Override
符号非常方便的地方非常感谢,我没有在painComponenet中看到额外的“e”@试着理解,不要忘了点击复选标记“接受”答案,这样人们就知道问题已经解决。也许你知道如何通过图形功能删除图像的白色背景?谢谢@andrewhompson的提示,我会编辑答案。
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();
      }

    }
}