Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法解决图像不显示问题_Java_Swing_Embedded Resource - Fatal编程技术网

Java Can';无法解决图像不显示问题

Java Can';无法解决图像不显示问题,java,swing,embedded-resource,Java,Swing,Embedded Resource,我试图显示的图像未正确显示 我正在使用ImageIO进行阅读,然后再进行绘制 import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class imagestukje extends JPanel { privat

我试图显示的图像未正确显示

我正在使用
ImageIO
进行阅读,然后再进行绘制

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class imagestukje extends JPanel {

    private BufferedImage image;

    public imagestukje() {
        try {
            image = ImageIO.read(new File("images/lingo.jpg"));
        } catch (IOException e) {

        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }
}

为什么不显示图像?

您好,在提出已解决的问题之前,您应该使用搜索功能


您可能会遇到两个问题:

  • 未定义面板的大小
  • 面板未重新喷漆
您可以通过以下方式改进面板:

public class ImagePanel extends JPanel {
    BufferedImage image;
    Dimension size = new Dimension();

    public ImagePanel() {
    }

    public ImagePanel(BufferedImage image) {
        this.image = image;
        this.size.setSize(image.getWidth(), image.getHeight());
    }

    public void setImage(BufferedImage image) {
        this.image = image;
        this.size.setSize(image.getWidth(), image.getHeight());
    }

    @Override
    protected void paintComponent(Graphics g) {
        if(this.image != null) {
            g.drawImage(this.image, x, y, this);
        }

    }

    @Override
    public Dimension getPreferredSize() {
        return this.size;
    }
}
try {
    image = ImageIO.read(new File("images/lingo.jpg"));
    ((ImagePanel) jPanel).setImage(image);

    jPanel.invalidate();
    jPanel.repaint();
} catch (IOException e) {

}
因此,在配置UI后,您可以使用以下任何图像初始化该面板:

public class ImagePanel extends JPanel {
    BufferedImage image;
    Dimension size = new Dimension();

    public ImagePanel() {
    }

    public ImagePanel(BufferedImage image) {
        this.image = image;
        this.size.setSize(image.getWidth(), image.getHeight());
    }

    public void setImage(BufferedImage image) {
        this.image = image;
        this.size.setSize(image.getWidth(), image.getHeight());
    }

    @Override
    protected void paintComponent(Graphics g) {
        if(this.image != null) {
            g.drawImage(this.image, x, y, this);
        }

    }

    @Override
    public Dimension getPreferredSize() {
        return this.size;
    }
}
try {
    image = ImageIO.read(new File("images/lingo.jpg"));
    ((ImagePanel) jPanel).setImage(image);

    jPanel.invalidate();
    jPanel.repaint();
} catch (IOException e) {

}

不要留下空的
catch
子句!您不知道您是否成功读取了图像。至少把
e.printStackTrace()
放在那里。我怀疑ImageIO.read失败了,但是没有办法判断,因为catch子句中没有任何东西可以澄清这一点。根据您的示例,与执行代码的位置相关的图像存储在哪里,它也应该脱离工作指导,也可以考虑;如果这不是重复的,请编辑您的问题,以包括一个显示您修改的方法。