2014-06-20 36 views
1

我已经在src和bin目录添加图像和交叉检查,图像文件的名称是正确的Java中的drawImage(),为什么不是图像加载?

这里是主类

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

尝试在覆盖方法之前添加@Override,您的IDE应提醒您它未被覆盖(由于错字,...)。除非你有充分的理由不要调用'super.paintComponent(g)'。 – kajacx

+4

“MyDrawPanel”的一个实例的首选大小为0x0像素。您的图像被绘制在边界矩形之外。 –

+5

为了获得更好的性能,不要在'paintComponent(Graphics g)'中创建一个新的ImageIcon(“b.png”)',在'MyDrawPanel'中创建'Image'属性。 – NiziL

回答

0

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

2
  1. frame.setVisible(true);应该是最后的代码行内public static void main(String args[]),因为你setSize已可见JFrame(只是躯干仅包含ToolbarButtons

  2. public static void main(String args[])每个Swing代码行应被包装成invokeLater(),更多的信息在Oracle tutorial Initial Thread

  3. public class MyDrawPanel extends JPanel返回零Dimension (0, 0)你必须覆盖getPreferredSize的(内部)MyDrawPanel extends JPanel,从frame.setSize(300,300);使用有new Dimension (300, 300),然后用frame.pack()

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

    一)不加载任何FileIOpaintComponent替换此代码行(frame.setSize(300,300);)创建这个Object为局部变量

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

    C)Dimensiong.drawImage(image,20, 20, this);frame.setSize(300,300);相应的,为什么的原因是有空白

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

0

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

或加满(绝对)路径

0

你宣布一个JFrame称为帧并正确宣称从可值得借鉴的面板继承的类。每次需要重写图像时,调用MyDrawPanel.Java中的方法paintComponent(Graphics G)

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

相关问题