我需要这个来实现秘密迷宫迷你游戏,我无法为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);
答案 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);
}