如何将背景图像添加到JPanel?

时间:2015-11-14 05:33:13

标签: java image swing jframe jpanel

我有一个JFrame,JPanel在里面。我的游戏背景是完全黑色的,因为实体位于它之上。我只想将背景改变为计算机中的图像,这是一种“最简单”的方式,而无需进行太多改动。

twoStacks(): mins(), values()
{
}

1 个答案:

答案 0 :(得分:4)

你可以......

使用JLabel作为背景组件......

JFrame container = new JFrame("Space Invaders");
JLabel label = new JLabel(new ImageIcon(ImageIO.read(...)));
label.setLayout(new BorderLayout());
container.setContentPane(label);

// Resolution
// There are simply so many different ways to achieve this
// that are better it's not funny
//JPanel panel = (JPanel) container.getContentPane();
//panel.setPreferredSize(new Dimension(800, 600));
//panel.setLayout(null);

// Canvas Size
//setBounds(0, 0, 800, 600);
//panel.add(this);

// Window Visible
container.pack();
container.setResizable(false);
container.setVisible(true);

container.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Pointless
//container.addWindowListener(new WindowAdapter() {
//    public void windowClosing(WindowEvent e) {
//          System.exit(0);
//      }
//});

这个问题是:

  1. 标签只会使用icontext属性来计算标签的preferredSize
  2. 如果您使用的是java.awt.Canvas,则会覆盖此组件,因为java.awt.Canvas无法透明。
  3. 有关详细信息,请参阅Reading/Loading an ImageHow to Use Labels

    你可以......

    在呈现内容重置之前,使用Graphics#drawImage绘制背景图片。

    这通常是一个更好的解决方案,因为您可以完全控制图像的大小和位置,如果您使用的是java.awt.CanvasBufferStrategy

    有关详细信息,请参阅2D GraphicsWorking with Images