我已将图像添加到 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);
}
}
最佳答案
frame.setVisible(true);
应该是public static void main(String args[])
内的最后一个代码行,因为您setSize
到已经可见的JFrame
(仅躯干仅包含Toolbar
和三个Buttons
)public static void main(String args[])
中的每个 Swing 代码行都应包装到invokeLater()
中,更多信息请参见 Oracle tutorial Initial Threadpublic class MyDrawPanel extends JPanel
返回零Dimension (0, 0)
您必须为(内部)重写getPreferredSize
MyDrawPanel 扩展了 JPanel
,使用frame.setSize(300,300);
中的new Dimension (300, 300)
,然后替换此代码行 (frame.setSize(300,300);
) 和frame.pack()
图像 image = new ImageIcon("b.png").getImage();
a) 不要在
paintComponent
中加载任何FileIO
,将此Object
创建为局部变量b)
paintComponent
内的第一个代码行应该是super.paintComponent()
并且没有理由是公共(public)的,但 protected (public void PaintComponent(Graphics g )
)c)
g.drawImage(image,20, 20, this);
中设置的Dimension
与frame.setSize(300,300); 不对应
,为什么会有空白d) 最重要的(如评论中所述)
Image image = new ImageIcon("b.png").getImage();
不是有效的 Java 路径
关于java - Java中的drawImage(),为什么图像没有加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24327231/