无法设置JPanel背景图像

时间:2014-01-02 10:12:41

标签: java image swing background embedded-resource

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

我有以下代码:

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,其他人则通过:

content.add(picLabel);

1 个答案:

答案 0 :(得分:1)

我有一些东西可以获得一个本地文件,并且看了一下,这对我有用:

    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而不是文件。

但我在我的程序中使用什么来读取本地文件(这对我的项目来说有点具体):

    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);
}