java - Java中的drawImage(),为什么图像没有加载?

标签 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);
    }
}

最佳答案

  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) 您必须为(内部)重写 getPreferredSize MyDrawPanel 扩展了 JPanel,使用 frame.setSize(300,300); 中的 new Dimension (300, 300),然后替换此代码行 (frame.setSize(300,300);) 和 frame.pack()

  4. 图像 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); 中设置的 Dimensionframe.setSize(300,300); 不对应,为什么会有空白

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

关于java - Java中的drawImage(),为什么图像没有加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24327231/

相关文章:

java - 我应该在哪里保存 JDBC 连接详细信息?

Java:如何知道 JOptionPane 何时通过单击 X 关闭?

java - CoreNLP MaxentTagger 数据格式错误

java - 为什么正则表达式可选的非捕获组不作为可选的并且搞砸比赛?

java - 减少数组的大小(通过创建新数组) - arrayList 是如何做到的?

python - 使用 matplotlib 绘制图像颜色直方图

image - 如何从此图像中删除此非红色和非圆形对象?把红色变成白色,其余的变成黑色

android - 只能在不持有的情况下执行 ImageView 的旋转

java - Spring MVC。无法渲染参数

java - 作为 KeyEvent 替代方案的键绑定(bind)仍然不起作用