Java 无法设置JPanel背景图像

Java 无法设置JPanel背景图像,java,image,swing,background,embedded-resource,Java,Image,Swing,Background,Embedded Resource,我需要这个来实现秘密迷宫迷你游戏,我无法为JPanel设置背景图像。严格来说,它必须是JPanel。此外,这将是一个很好的解决通过一个网址。如果你能给我一些,不仅仅是想法,我会很感激,因为我读过一些想法,但它们不起作用,或者至少我没有成功地实现它们 我有以下代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class PanelLooks

我需要这个来实现秘密迷宫迷你游戏,我无法为JPanel设置背景图像。严格来说,它必须是JPanel。此外,这将是一个很好的解决通过一个网址。如果你能给我一些,不仅仅是想法,我会很感激,因为我读过一些想法,但它们不起作用,或者至少我没有成功地实现它们

我有以下代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class PanelLooks extends JFrame
{
    JPanel content = new JPanel();
    private JButton NewGameBtn = new JButton("New Game");
    private JButton TopTimesBtn = new JButton("Top Times");
    private JButton QuitGameBtn = new JButton("Quit Game");
    public PanelLooks() {
        setPreferredSize(new Dimension(600, 600));
        content.setLayout(new FlowLayout());
        content.add(NewGameBtn);
        content.add(TopTimesBtn);
        content.add(QuitGameBtn);
        NewGameBtn.setBounds(250, 160, 100, 30);
        TopTimesBtn.setBounds(250, 260, 100, 30);
        QuitGameBtn.setBounds(250, 360, 100, 30);
        this.setContentPane(content);
        this.pack();
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setTitle("Secret Maze");
   }
编辑后的最新版本包含由于NullPointerException而失败的尝试:

private BufferedImage myPicture;
    private JLabel picLabel = new JLabel(new ImageIcon(myPicture));
    public void backgroundImage()
    {
        try
        {
            BufferedImage myPicture = ImageIO.read(new File("D:/Dokumentumok/Egyetem/Object oriented programming/Java project/Project/Background.jpg"));
        }
        catch(IOException ex)
        {
            System.err.println("File not found!");
        }
    }
此picLabel在构造函数中调用,与其他picLabel一样:

content.add(picLabel);

我找到了一个本地文件,四处看了看,这对我很有用:

    public static void changeIcon2(URL adress,JLabel imageLabel) throws JavaLayerException, IOException, InterruptedException {
    imageLabel.setVisible(false);
    BufferedImage temp = ImageIO.read(adress);

    imageLabel.setIcon(new ImageIcon(temp));

    imageLabel.setVisible(true);
}
只需在需要的代码中调用它

所以-你的问题(我也遇到了)你必须使用URL而不是文件

但我在程序中读取本地文件时使用的内容(对于我的项目有点特殊):


“因为我读过一些想法”通过链接到它们来证明它,并解释你不理解的东西!这似乎是做过0项研究的人的典型陈述,他希望我们第一百万次向他们提供信息(顺便说一句,Java GUI可能需要在多个平台上工作,在不同的屏幕分辨率和使用不同的PLAF。因此,它们不利于组件的精确放置。要组织组件以获得一个健壮的GUI,请使用布局管理器,或者使用布局填充和边框。这是关于颜色或图像的问题吗o到目前为止,有两个人假设“颜色”,虽然标题是“图像”。关于图像。颜色很明显。有一种颜色,只是为了看看setBackground是否工作,但我想要一个图像。尝试添加一个try-catch语句,使用BuffereImage添加路径,它抛出一个NullPointerException。尝试使用内部类s正如本网站上的一些答案一样,没有发生任何事情。使用标签尝试:没有发生任何事情。“你必须使用URL而不是文件。”+1此BG图像显然是一个嵌入式资源(它将在一个Jar中)一个较长的方式可以说是:在部署的时候,这些资源可能会变成一个。在这种情况下,资源必须通过<代码> URL<代码>访问,而不是<代码>文件<代码>。请参阅标签,以形成一个<代码> URL>代码>。已设置为URL,但仍在此行抛出我的NullPointerException:private JLabel picLabel=new JLabel(new ImageIcon(myPicture));这是因为myPicture尚未初始化。您必须在try-catch块后调用该行,然后它应按预期工作。-或者添加默认图像作为占位符,然后只需调用private BuffereImage myPicture=new BuffereImage(占位符);而不仅仅是私人BuffereImage myPicture;感谢你们对你们俩的帮助。最后,本网站将教我一些编程,而不是教我的教授。:)
    public static void changeIcon(String championname,JLabel imageLabel) throws JavaLayerException, IOException, InterruptedException {
    imageLabel.setVisible(false);
    ImageIcon temp = new ImageIcon(getLolPath()+"\\League of Legends\\rads\\projects\\lol_air_client\\releases\\"+currentVersion+"\\deploy\\assets\\images\\champions\\"+championname+"_Square_0.png");

    imageLabel.setIcon(temp);

    imageLabel.setVisible(true);
}