【问题标题】:Why doesn't my image get displayed? (Java)为什么我的图片不显示? (爪哇)
【发布时间】:2013-10-11 13:33:17
【问题描述】:

所以我有一个图像分割项目要完成,第一阶段是让Java显示图像。

我遇到的问题是我可以显示一个窗口,但是我加载的图像没有被渲染。

如果我这样做完全错误,那么请告诉我。我花了一个下午寻找有关使用 Java 处理图像的明确解释,但是我没有找到任何好的、明确的资源。

我现在有两个类:主类和图片加载类。

这是我的主要课程:

import javax.swing.*;

public class LoadImageMain extends JFrame {

public static void main(String[] args) {            
    displayImage("HelloWorld.png");
}

public static void displayImage(String path) {
    JFrame frame = new JFrame("Display Image");
    LoadImage panel = new LoadImage(path);

    frame.setSize(1200, 800);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.setContentPane(panel);
    frame.setVisible(true);
}   
}

我的第二个类是为了渲染图像:

public class LoadImage extends JPanel {
   private Image img;

public LoadImage(String path) {
    img = getImage(path);       
}

@Override
public void paintComponent(Graphics g) {    
    super.paintComponent(g);
    g.drawImage(img, 0, 0, null);       
}

public Image getImage(String path) {
    Image tempImg = null;

    try {
        tempImg = Toolkit.getDefaultToolkit().getImage(path);
    }
    catch (Exception e) {
        System.out.println("Image not found. Error: " + e.getMessage());
    }

    return tempImg;
}
}

【问题讨论】:

  • 我希望 answer 能够为您解决问题,但如果您使用任何 IDE 或想了解更多信息,请查看此 answer,其中包含详细的描述需要做什么。希望它有所帮助:-)
  • 不要重新发明轮子。只需使用 JLabel。阅读 How to Use Icons 上的 Swing 教程以获取工作示例。 I've spent the afternoon looking for clear explanations on handling images with Java however I haven't found any good, clear resources - 本教程包含所有 Swing 组件的基础知识。保留指向该教程的链接。
  • @nIcEcOw 您发布的第二个答案解决了我的问题,谢谢!如果我使用 ImageIO.read() 则图像加载正确。
  • @Alex : 很高兴这个答案在某种程度上帮助了你,尽管与 ImageObserver thingy 相关的答案也值得注意,因为它是通知JPanel 的一种方式(在这个案例)关于图像的新加载部分(虽然使用 ImageIO,但似乎它并不是那么重要的部分)。其余的你最欢迎并保持微笑:-)

标签: java image swing jpanel paintcomponent


【解决方案1】:

我看到你没有为drawImage 定义观察者。

改为:

g.drawImage(img, 0, 0, null);  

设置

g.drawImage(img, 0, 0, this);

【讨论】:

    【解决方案2】:

    我认为图像未加载。检查 tempImg 的宽度/高度。猜他们是 0。

    【讨论】:

    • @haraldK:OP 访问图像的方式是,我会让自己远离。相反,我将使用javax.imageio.ImageIO.read 来完成手头的这类工作(因为它会等待图像加载后再继续),尽管ImageObserver 在某种程度上是正确的做法,尽管它不是唯一的原因,在我看来。
    • @nIcEcOw 我正在编辑评论的路上。 ;-) 使用ImageIO 甚至像camickr 这样的JLabel 建议也是更好的选择IMO,只是不是OP Q 中问题的确切解决方案。我的观点更多的是这个答案不包含解决方案的尝试,应该成为评论。
    • @haraldK : LOL :-) 太真实了,从没在那一行见过这个东西。现在一天我主要是在评论然后回答问题,所以每个答案在我看来都是一个答案,尽管你是对的 :-) 指出这应该是一个评论。
    • @StanislavL 你是对的,图片没有加载。高度/宽度显示为 -1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    相关资源
    最近更新 更多