获取要在Java中显示的图像

获取要在Java中显示的图像,java,image,swing,graphics,javax.imageio,Java,Image,Swing,Graphics,Javax.imageio,我试图在JFrame中显示背景图像,但是图像没有显示,并且我找不到代码中的错误 public class GraphicsComponent extends JComponent { int xPosition = 200;//initializes and declares the x coordinate int yPosition = 400;//initializes and declares the y coordinate Image i; public G

我试图在JFrame中显示背景图像,但是图像没有显示,并且我找不到代码中的错误

public class GraphicsComponent extends JComponent
{
    int xPosition = 200;//initializes and declares the x coordinate
    int yPosition = 400;//initializes and declares the y coordinate
    Image i;

public GraphicsComponent()
{
    try{
        File sky = new File("lib/background.png");
        i = ImageIO.read(sky);

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

public void paintComponent(Graphics g) //overrides paintComponent method in JComponent
{
    if (i == null) return;
    g.drawImage(i, 0, 0, this);
}

为什么要创建自定义组件?如果创建自定义组件,则还需要重写组件的
getPreferredSize()
方法,以返回图像的大小,以便布局管理器可以以适当的大小绘制组件

因此,组件的大小可能为零,因此没有要绘制的内容


最简单的解决方案是只使用带有
图像图标的
JLabel
,让布局管理器处理大小问题。

为什么要创建自定义组件?如果创建自定义组件,则还需要重写组件的
getPreferredSize()
方法,以返回图像的大小,以便布局管理器可以以适当的大小绘制组件

因此,组件的大小可能为零,因此没有要绘制的内容


最简单的解决方案是只使用带有
图像图标的
JLabel
,让布局管理器处理大小问题。

为什么要创建自定义组件?如果创建自定义组件,则还需要重写组件的
getPreferredSize()
方法,以返回图像的大小,以便布局管理器可以以适当的大小绘制组件

因此,组件的大小可能为零,因此没有要绘制的内容


最简单的解决方案是只使用带有
图像图标的
JLabel
,让布局管理器处理大小问题。

为什么要创建自定义组件?如果创建自定义组件,则还需要重写组件的
getPreferredSize()
方法,以返回图像的大小,以便布局管理器可以以适当的大小绘制组件

因此,组件的大小可能为零,因此没有要绘制的内容



最简单的解决方案是只使用带有图像图标的
JLabel
,让布局管理器处理大小问题。

主程序中有什么。你能发布完整的代码吗。如何将其添加到
JFrame
?图像位于何处?它是位于src/应用程序上下文中还是相对于程序的执行?是否引发异常?您还应该调用super.paintComponent,特别是对于JComponent,因为默认情况下它是透明的。到部署时,这些资源很可能会成为一个组件。在这种情况下,必须通过
URL
而不是
File
访问资源。请参阅标签,了解形成
URL
的方法。主程序中有什么。您可以发布完整的代码吗。如何将其添加到
JFrame
?图像位于何处?它是位于src/应用程序上下文中还是相对于程序的执行?是否引发异常?您还应该调用super.paintComponent,特别是对于JComponent,因为默认情况下它是透明的。到部署时,这些资源很可能会成为一个组件。在这种情况下,必须通过
URL
而不是
File
访问资源。请参阅标签,了解形成
URL
的方法。主程序中有什么。您可以发布完整的代码吗。如何将其添加到
JFrame
?图像位于何处?它是位于src/应用程序上下文中还是相对于程序的执行?是否引发异常?您还应该调用super.paintComponent,特别是对于JComponent,因为默认情况下它是透明的。到部署时,这些资源很可能会成为一个组件。在这种情况下,必须通过
URL
而不是
File
访问资源。请参阅标签,了解形成
URL
的方法。主程序中有什么。您可以发布完整的代码吗。如何将其添加到
JFrame
?图像位于何处?它是位于src/应用程序上下文中还是相对于程序的执行?是否引发异常?您还应该调用super.paintComponent,特别是对于JComponent,因为默认情况下它是透明的。到部署时,这些资源很可能会成为一个组件。在这种情况下,必须通过
URL
而不是
File
访问资源。请参阅标签,了解形成
URL
的方法。每个人都是这样做的,为什么不知道为什么:)我尝试使用它,但由于某些原因它仍然没有显示:JLabel iconLabel=new JLabel(new ImageIcon(“background.png”);frame.add(iconLabel)@用户2963365,发布演示如何使用JLabel的日志。确保在使框架可见之前将标签添加到框架中。每个人都是这样做的,为什么不知道原因:)我尝试过使用它,但由于某种原因它仍然没有显示:JLabel iconLabel=new JLabel(new ImageIcon(“background.png”);frame.add(iconLabel)@用户2963365,发布演示如何使用JLabel的日志。确保在使框架可见之前将标签添加到框架中。每个人都是这样做的,为什么不知道原因:)我尝试过使用它,但由于某种原因它仍然没有显示:JLabel iconLabel=new JLabel(new ImageIcon(“background.png”);frame.add(iconLabel)@用户2963365,发布演示如何使用JLabel的日志。确保在使框架可见之前将标签添加到框架中。每个人都是这样做的,为什么不知道原因:)我尝试过使用它,但由于某种原因它仍然没有显示:JLabel iconLabel=new JLabel(new ImageIcon(“background.png”);frame.add(iconLabel)@用户2963365,发布演示如何使用JLabel的日志。确保在使框架可见之前将标签添加到框架中。