java - 如何向 JPanel 添加背景图像?

标签 java image swing jframe jpanel

我有一个 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作为背景组件...

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.Canvas缓冲策略

参见 2D GraphicsWorking with Images了解更多详情

关于java - 如何向 JPanel 添加背景图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705467/

相关文章:

java - 在 Java 中请求输入时忽略 nextLine

java - 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

java - 比较两个列表并在 Java 中输出缺失和多余的元素

java - 如何使用 Java 服务器将图像发送到 Android 设备

image - 在 Wordpress 中为图像分配类别

java - JButton运行主方法

java - 如何在 Java 中制作小于 125 x 50 的窗口?

java - 使用 Java 和 VB.net

html - src 值不是从 firefox 的 root 中获取的,在 chrome 中工作正常

java - 调整 JDatePicker Java Swing 的大小