【问题标题】:How do I add a background image to a JPanel?如何将背景图像添加到 JPanel?
【发布时间】:2016-02-15 18:51:30
【问题描述】:

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

public Game() {
    // Frame
    JFrame container = new JFrame("Space Invaders");

    // Resolution
    JPanel panel = (JPanel) container.getContentPane();
    panel.setPreferredSize(new Dimension(800,600));
    panel.setLayout(null);

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

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

    container.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
}

【问题讨论】:

  • 创建一个JLabel,将其布局设置为BorderLayout,像使用其他任何标签一样将图像应用到其上,将其设置为框架的contentPane,然后像以前一样继续.当然,你可以简单地使用Graphics#drawImage,但由于我不知道你的代码实际上是如何工作的,所以很难就什么是“最简单”提出建议

标签: java image swing jframe jpanel


【解决方案1】:

你可以...

使用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 不能是透明的。

请参阅Reading/Loading an ImageHow to Use Labels 了解更多详情

你可以...

使用Graphics#drawImage 在渲染内容重置之前绘制背景图像。

一般来说,这将是一个更好的解决方案,因为您可以完全控制图像的大小和位置,并且如果您使用 java.awt.CanvasBufferStrategy 则可以工作

更多详情请参阅2D GraphicsWorking with Images

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多