【问题标题】:Image not loading in frame图像未加载到框架中
【发布时间】:2012-01-06 12:01:06
【问题描述】:

所以这些是我使用的两个不同的文件:

    public class TestFunc {

    static BufferedImage img;   
    public static void main(String[] args){


        JFrame frame = new JFrame("Display");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);

        ShowImage I = new ShowImage();
        frame.getContentPane().add(I);
        frame.setVisible(true);

    }
}

还有一个:

public final class ShowImage extends JPanel{

Image image;

public ShowImage(){

    super();
    image = Toolkit.getDefaultToolkit().getImage("Sunset.jpg");

}

public void paintComponent(Graphics g){
    g.drawImage(image, 0, 0, this);

}

 }

但是,框架上没有显示任何内容,并且显示为空白。我对这个很陌生,无法弄清楚。

谢谢。

【问题讨论】:

  • 实际上写的没什么问题——它应该可以正常工作。运行程序时在当前目录中的“Sunset.jpg”是有效图像吗?
  • 是的,我也尝试了不同的图像,我不确定为什么它不显示。
  • 需要完整路径名,即使图像存在于我的目录中。然后就可以了。是因为存在不同的软件包吗? (实际上现在只有一个包包含所有工作文件)
  • 在类路径中找不到图像。路径是相对于当前工作目录 的文字路径,即您在输入java TestFunc 时所在的目录。如上所述,该文件必须在工作目录中。如果您有兴趣在类路径上查找图像,请查看 ClassLoader.getResource() 和类似方法。
  • @Andrew 是的,这些课程都在同一个包中

标签: java image swing jframe paintcomponent


【解决方案1】:

尝试在 JLabel 中使用 ImageIcon:

JFrame frame = new JFrame("Display");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.setVisible(true);

        JPanel jp = new JPanel();
        frame.add(jp);
        jp.add(new JLabel(new ImageIcon("d:\\temp\\me.JPG")));

        frame.pack();

【讨论】:

  • 一旦调用frame.pack(); //goodframe.setSize(600, 400); //bad 就会变得多余。 +1 ImageIconpack()
  • 如果我给出完整的路径名,这也可以。谢谢!无论如何,与早期的方法有什么区别?是的,删除了调整大小。
  • 看起来图像不在您预期的位置,或者至少没有在您预期的位置被搜索。检查路径。
  • 嗯,最好的完成是查看 SWING 官方教程。它有很多有用的东西,而且它的模块化非常好,比如你只能检查你需要的部分,并且仍然对如何使用它有一个好主意。以下是图片部分:docs.oracle.com/javase/tutorial/uiswing/components/icon.html
猜你喜欢
  • 1970-01-01
  • 2016-08-27
  • 2014-09-19
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多