package com.fjl;
import com.fjl.com.fjl.utils.GameUtils;
import javax.swing.*;
import java.awt.*;
/**
* @author FJL
* @version 1.0
*/
//窗口的创建
public class GameWin extends JFrame {
public void launch() {
//窗口是否可见
this.setVisible(true);
//窗口的大小
this.setSize(600, 600);
//窗口位置
this.setLocationRelativeTo(null);
//窗口标题
this.setTitle("飞机大战");
}
//override paint method
@Override
public void print(Graphics g) {
g.drawImage(GameUtils.background1, 0, 0, null);
}
public static void main(String[] args) {
GameWin gameWin = new GameWin();
gameWin.launch();
}
}
package com.fjl.com.fjl.utils;
import java.awt.*;
/**
* @author FJL
* @version 1.0
*/
public class GameUtils {
// 背景图片添加
public static Image background1 = Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");
}
代码编译没问题,运行时只有窗口,里面没有插入的背景图片,我按照File-->Invalidate Cashes清除缓存重启均无效
参考GPT和自己的思路:根据您提供的代码,我看到您使用了Toolkit.getDefaultToolkit().getImage()方法加载背景图片。这种方式在加载较大的图片时可能会遇到问题,可能导致图片无法显示。我建议您使用ImageIO类加载图片。您可以尝试将以下代码添加到GameUtils类中,以加载背景图片:
public static Image background1;
static {
try {
background1 = ImageIO.read(new File("imgs/bg.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
请确保您正确设置了背景图片的路径。如果仍然无法显示背景图片,请在控制台中查看是否有相关的错误信息。
参考GPT的回答
在Java中使用print()方法进行绘图通常是不被推荐的做法,因为它会覆盖掉窗口中原有的组件和内容,并且还可能导致一些性能问题。
建议您使用JPanel作为容器,在上面添加用于显示背景的JLabel组件。您可以将GameWin类改成以下形式:
java
package com.fjl;
import com.fjl.com.fjl.utils.GameUtils;
import javax.swing.*;
import java.awt.*;
/**
* @author FJL
* @version 1.0
*/
//窗口的创建
public class GameWin extends JFrame {
public void launch() {
//窗口是否可见
this.setVisible(true);
//窗口的大小
this.setSize(600, 600);
//窗口位置
this.setLocationRelativeTo(null);
//窗口标题
this.setTitle("飞机大战");
// 创建一个 JPanel 用于放置 JLabel 组件
JPanel panel = new JPanel();
// 设置背景图片
panel.setBackground(new Color(255, 255, 255));
panel.setLayout(null); // 不使用任何布局管理器
// 创建 JLabel,并设置其大小和位置,添加到 JPanel 中
JLabel bgLabel = new JLabel(new ImageIcon(GameUtils.background1));
bgLabel.setBounds(0, 0, 600, 600);
panel.add(bgLabel);
// 将 JPanel 添加到 JFrame 的内容面板中
this.getContentPane().add(panel);
}
public static void main(String[] args) {
GameWin gameWin = new GameWin();
gameWin.launch();
}
}
这样修改后,运行程序时就会在窗口中显示背景图片了。需要注意的是,在使用JPanel时需要手动设置布局管理器,或者直接使用null,否则可能会导致组件无法正确显示。