【问题标题】:drawImage() in Java, why isn't the image loading?Java中的drawImage(),为什么没有加载图像?
【发布时间】:2014-06-20 12:24:57
【问题描述】:

我已经在 src 和 bin 目录中添加了图像,并交叉检查了图像文件的名称是否正确

这里是主类

import javax.swing.*;

public class apples
{
    public static void main(String args[])
    {
        JFrame frame = new JFrame();
        MyDrawPanel wid = new MyDrawPanel();
        frame.add(wid);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setSize(300,300);
    }
}

这是图像添加部分的类

import java.awt.*;
import javax.swing.*;

public class MyDrawPanel extends JPanel 
{
    public void paintComponent(Graphics g)
    {

        Image image = new ImageIcon("b.png").getImage();
        g.drawImage(image,20, 20, this);
    }
}

【问题讨论】:

  • 尝试在您的覆盖方法之前添加@Override,您的 IDE 应该提醒您它没有被覆盖(由于错字,...)。也请致电super.paintComponent(g),除非您有充分的理由不这样做。
  • MyDrawPanel 的实例的首选大小为 0x0 像素。您的图像绘制在其边界矩形之外。
  • 为了更好的性能,不要在paintComponent(Graphics g)中创建new ImageIcon("b.png"),在Image中创建Image属性
  • 您也可以阅读本教程:zetcode.com/tutorials/javaswingtutorial/painting,或任何其他。
  • 希望这个thread 能够在这个方向上有所帮助,尤其是最后一个链接,如果你手动进行:-)

标签: java image swing jpanel paintcomponent


【解决方案1】:
  1. frame.setVisible(true); 应该是public static void main(String args[]) 内的最后一行代码,因为你的setSize 已经可见JFrame(只是躯干只包含Toolbar 和三个Buttons

    李>
  2. public static void main(String args[]) 中的每个 Swing 代码行都应包装到 invokeLater() 中,更多信息请参见 Oracle tutorial Initial Thread

  3. public class MyDrawPanel extends JPanel 返回零 Dimension (0, 0) 您必须为(内部)MyDrawPanel extends JPanel 覆盖 getPreferredSize,在 frame.setSize(300,300); 中使用 new Dimension (300, 300),然后将此代码行 (frame.setSize(300,300);) 替换为frame.pack()

  4. Image image = new ImageIcon("b.png").getImage();

    a) 不要在paintComponent 中加载任何FileIO,将这个Object 创建为局部变量

    b) paintComponent 内的第一行代码应该是 super.paintComponent() 并且没有理由公开,但受到保护 (public void paintComponent(Graphics g))

    c) g.drawImage(image,20, 20, this); 中设置的Dimensionframe.setSize(300,300); 不对应,为什么会有空白空间

    d) 最重要的(如 cmets 中所述)Image image = new ImageIcon("b.png").getImage(); 不是有效的 Java 路径

【讨论】:

    【解决方案2】:

    尝试使用 getClass().getResource("b.png");而不是简单地给出文件名。 因为有时候收不到图片,所以提取路径和资源。

    【讨论】:

      【解决方案3】:

      当您使用 eclipse 或其他框架时,您必须在主项目文件中添加您的图像(或任何文件)
      如果你决定在项目中专门化一个特定的文件夹——例如保存图像——你可以写Image image = new ImageIcon("src\\b.png").getImage();//replace the src with folder name

      或添加完整(绝对)路径

      【讨论】:

        【解决方案4】:

        您正在声明一个名为 frame 的 JFrame,并正确声明了一个从 Panel 继承的可以绘制的类。每次需要重写图像时,都会调用MyDrawPanel.Java 中的方法paintComponent(Graphics G)

        我在自己的 IDE 中测试了您的代码,它适用于我。我认为,正如其他人所建议的那样,您的图片需要拖到您的 Eclipse IDE 中。只需将其拖放到您的 Java 项目中即可。

        【讨论】:

          猜你喜欢
          • 2020-08-26
          • 1970-01-01
          • 1970-01-01
          • 2014-12-27
          • 1970-01-01
          • 2019-04-28
          • 1970-01-01
          • 2020-05-10
          • 1970-01-01
          相关资源
          最近更新 更多