Java中的drawImage(),为什么不加载图像?

时间:2014-06-20 12:24:58

标签: java image swing jpanel paintcomponent

我已将图像添加到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);
    }
}

4 个答案:

答案 0 :(得分:2)

  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. 的更多信息
  4. public class MyDrawPanel extends JPanel返回零Dimension (0, 0)您必须覆盖getPreferredSize({1}}内部MyDrawPanel extends JPanelnew Dimension (300, 300)使用frame.setSize(300,300);然后将此代码行(frame.setSize(300,300);)替换为frame.pack()

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

    a)不要在FileIO内加载任何paintComponent,将此Object创建为本地变量

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

    c)Dimension中设置的g.drawImage(image,20, 20, this);frame.setSize(300,300);不对应,原因是为什么有空格

    d)最重要的(如评论中所述)Image image = new ImageIcon("b.png").getImage();无效的Java路径

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

或添加完整(绝对)路径

答案 3 :(得分:0)

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

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