我已将图像添加到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);
}
}
答案 0 :(得分:2)
frame.setVisible(true);
应该是public static void main(String args[])
内的最后一个代码行,因为setSize
已经显示JFrame
(只有躯干仅包含Toolbar
Buttons
)
public static void main(String args[])
中的每个Swing代码行都应包含在invokeLater()
中,有关Oracle tutorial Initial Thread
public class MyDrawPanel extends JPanel
返回零Dimension (0, 0)
您必须覆盖getPreferredSize
({1}}内部MyDrawPanel extends JPanel
,new Dimension (300, 300)
使用frame.setSize(300,300);
然后将此代码行(frame.setSize(300,300);
)替换为frame.pack()
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项目中即可。