我最近开始开发一个Java迷你游戏,而且我一直在设法在我的框架上放置背景图像。我在StackOverflow上搜索了这个,我找到了一些有很好建议的线程,但我根本无法在我已经完成的Frame上实现它们(事情是我找到了制作新帧并在其上添加背景图像的方法)新创建的框架与类,但我已经创建了我的框架,我只是不能使代码在我的项目上工作。)
以下是我发现的内容:http://java-demos.blogspot.ro/2012/09/setting-background-image-in-jframe.html
我尝试了一切,但无法使其发挥作用。我能做的最好的就是这一行:**frame**.setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png")));
这条线成功设置了我的背景图片,但我不能再用我的键控制广场了,我有一些错误。
这是我的相关代码,我需要帮助将背景图像应用到我的Frame(带框架,画布或面板,欢迎任何选项)。
public class Game implements Runnable{
final int WIDTH = 640;
final int HEIGHT = 480;
JFrame frame;
Canvas canvas;
BufferStrategy bufferStrategy;
public Game(){
frame = new JFrame("Basic Game");
JPanel panel = (JPanel) frame.getContentPane();
panel.setPreferredSize(new Dimension(WIDTH, HEIGHT));
panel.setLayout(null);
canvas = new Canvas();
canvas.setBounds(0, 0, WIDTH, HEIGHT);
canvas.setIgnoreRepaint(true);
panel.add(canvas);
canvas.addKeyListener(new KeyControl()); //adds the controller
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setResizable(false); //non resizable window
frame.setVisible(true);
canvas.createBufferStrategy(2);
bufferStrategy = canvas.getBufferStrategy();
canvas.requestFocus();
}
答案 0 :(得分:0)
不要将AWT组件(Canvas)与SWING组件(JFrame)混合使用。它不起作用。做这样的事。
public class Game extends JFrame {
public Game() {
initUI();
}
private void initUI() {
JLabel background = new JLabel("image.png");
setContentPane(background);
pack();
repaint();
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Game g = new Game();
g.setVisible(true);
running = true;
}
});
}
答案 1 :(得分:0)
请记住,java.awt.Canvas
(以及所有AWT组件)不支持透明度。
一般来说,你不应该将BufferStrategy
与Swing混合,因为它们会使用不同的绘画过程,这可能会导致问题。
不是试图通过不同的组件绘制背景,只需将背景直接绘制到BufferStrategy
,然后将剩余的游戏状态绘制在其顶部......