【问题标题】:JPanel background imageJPanel 背景图片
【发布时间】:2011-02-25 14:46:03
【问题描述】:

这是我的代码,它确实找到了图像,所以这不是我关心的问题,我关心的是如何使该图像成为面板的背景。我正在尝试使用图形,但我不工作,有什么想法吗?请问??

try {
            java.net.URL imgURL = MAINWINDOW.class.getResource(imagen);

            Image imgFondo = javax.imageio.ImageIO.read(imgURL);
            if (imgFondo != null) {
                Graphics grafica=null;
                grafica.drawImage(imgFondo, 0, 0, this);
                panel.paintComponents(grafica);
            } else {
            System.err.println("Couldn't find file: " + imagen);
            }

        } catch...

【问题讨论】:

    标签: java image graphics jpanel


    【解决方案1】:

    这里的代码有错误。在取消引用之前,您将 grafica 设置为 null 行。这肯定会引发NullPointerException。与其声明自己的 Graphics 对象,不如使用传入将用于绘画的方法的对象。要在 Swing 中执行此操作,您应该实现 paintComponent 方法来绘制图像,如下所示:

      public void paintComponent(Graphics grafica) {
         grafica.drawImage(imgFondo, 0, 0, this); 
      }
    

    请注意,您不想执行长时间运行的任务,例如在绘画线程中从磁盘读取图像文件。上面的示例假定您已经加载了imgFondo 并将其存储为可以在paintComponent 方法中访问。

    【讨论】:

    • 谢谢,这是否意味着我必须重写该方法?或者只是在我的课堂上实现它?
    • 如果你实现它,你将覆盖超级的方法。
    • null); //no need for ImageObserver here 最好不假设类将如何使用..
    【解决方案2】:

    如果您只是要以原始大小绘制图像,那么您需要做的就是将图像添加到 JLabel 中,然后通过设置其布局管理器将标签用作容器。

    您需要进行自定义绘画的唯一时间是您想要缩放或平铺背景图像或进行其他一些花哨的绘画。

    有关这两种方法的更多信息,请参阅Background Panel

    另外,请查看 Custom Painting 上的 Swing 教程部分。

    【讨论】:

    • 谢谢!这些链接非常有用。我还有一个问题,我知道如何将图像放入标签中,但是如何使该标签位于所有其他组件下方?在我的应用程序中,我正在创建动态和静态组件。
    • 我不明白这个问题。我在“背景面板”链接中为您提供了如何执行此操作的示例。我给了您 4 行代码,向您展示了如何使标签的行为与 JPanel 一样,以便您可以将其用作框架的内容窗格。如果您需要更多帮助发布您的 SSCCE:sscce.org
    猜你喜欢
    • 2018-08-10
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多