如何在jframe上使用Imageicon打开图像

时间:2013-08-18 04:08:36

标签: java swing jframe jlabel imageicon

我试图通过使用Imageicon在jframe上绘制图像。但是当我运行它时它只是空白。继承我的代码......

    public final class PICS

{

  public static final void main(String... aArgs)
  {   
      JFrame frame = new JFrame("IMAGE");
      frame.setVisible(true);
      frame.setSize(500,500);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      ImageIcon image = new ImageIcon("image/pic1.jpg");
      JLabel label = new JLabel("", image, JLabel.CENTER);
      JPanel panel = new JPanel(new BorderLayout());
      panel.add( label, BorderLayout.CENTER );
  } 
}

我对包括本网站在内的所有java都很新,所以如果我遗漏了一些内容,我会道歉。我也使用Eclipse,是否有可用于图像的特定格式,或者是否有大小限制?

2 个答案:

答案 0 :(得分:2)

两件事。

首先,在您构建框架及其内容之后,将setVisible作为最后一次调用...即

JFrame frame = new JFrame("IMAGE");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon image = new ImageIcon("image/pic1.jpg");
JLabel label = new JLabel("", image, JLabel.CENTER);
JPanel panel = new JPanel(new BorderLayout());
panel.add( label, BorderLayout.CENTER );
// Make me last
frame.setVisible(true);

二,确保image/pic1.jpg存在,并且是当前执行上下文下的目录image

如果图片是嵌入式资源(位于Jar或您的应用程序中),那么您需要为图片提供URL而不是String ImageIcon对待String {1}}作为文件名......

ImageIcon image = new ImageIcon(PICS.class.getResource("image/pic1.jpg"));

例如。

我建议您使用JFrame#pack而不是JFrame#setSize,因为它会将框架调整为您内容的首选尺寸......

我还建议您花点时间阅读Code Conventions for the Java Programming LanguageInitial Threads

我还鼓励您使用ImageIO而不是ImageIcon,因为如果出现问题,至少会抛出Exception

更新,测试图片路径

尝试将此添加到PICS类的构造函数中。这将至少告诉你图像不在哪里......

try {
    ImageIO.read(PICS.class.getResource("image/pic1.jpg"));
} catch (IOException ex) {
System.out.println("Not in image/pic1.jpg");
}
try {
    ImageIO.read(PICS.class.getResource("/image/pic1.jpg"));
} catch (IOException ex) {
System.out.println("Not in /image/pic1.jpg");
}
try {
    ImageIO.read(PICS.class.getResource("resources/image/pic1.jpg"));
} catch (IOException ex) {
System.out.println("Not in resources/image/pic1.jpg");
}
try {
    ImageIO.read(PICS.class.getResource("/resources/image/pic1.jpg"));
} catch (IOException ex) {
System.out.println("Not in /resources/image/pic1.jpg");
}

答案 1 :(得分:2)

  

我对包括本网站在内的所有内容都很陌生

然后我建议你先阅读教程,特别是Swing tutorial。也许How to Use Icons部分可能是一个很好的起点。示例代码将向您展示如何使用Icons以及如何构建程序,以便在EDT上执行GUI代码。关于并发的教程将解释为什么EDT很重要。