【发布时间】: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;
}
}
【问题讨论】:
-
不要重新发明轮子。只需使用 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 : 很高兴这个答案在某种程度上帮助了你,尽管与
ImageObserverthingy 相关的答案也值得注意,因为它是通知JPanel的一种方式(在这个案例)关于图像的新加载部分(虽然使用 ImageIO,但似乎它并不是那么重要的部分)。其余的你最欢迎并保持微笑:-)
标签: java image swing jpanel paintcomponent