java - 将其他组件添加到带背景的 JFrame

标签 java swing

我想向我的 JFrame 添加背景图像,但是当我使用下面的代码执行此操作时,我无法添加其他元素,如 JLabel 或 JTextField。

ImageIcon icon = new ImageIcon("src/images/back.jpg");
backImage = icon.getImage();
BackgroundImagePanel contentPane = new BackgroundImagePanel();
contentPane.setBackgroundImage(backImage);
this.setContentPane(contentPane);

如果有另一种方法可以将 JTabbedPane 添加到具有背景的 JFrame 中,您能告诉我吗?

谢谢。

最佳答案

像这样?

附录:“通常您会先调用super.paintComponent(g),但由于图像将覆盖整个背景,因此没有必要这样做。”— camickr

附录:另见 opacity property .

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Imager {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new ImagePanel("image.jpg"));
                frame.pack();
                frame.setVisible(true);
            }
        });
    }

    private static class ImagePanel extends JPanel {

        BufferedImage img;

        ImagePanel(String name) {
            this.setToolTipText(name);
            this.add(new JLabel(name));
            try {
                img = ImageIO.read(new File(name));
                this.setPreferredSize(new Dimension(
                    img.getWidth(), img.getHeight()));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        protected void paintComponent(Graphics g) {
            // super.paintComponent(g);
            g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
        }
    }
}

关于java - 将其他组件添加到带背景的 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2960279/

相关文章:

java - 映射 map 键的最佳方式

java - 使用 JDialog 中的数据更新 JInternalFrame 中的表

java - 我如何在同一类中使用处理和 Swing ?

java - 从数据库中删除已删除的实体

java 6 上的 jmockit 测试用例必须使用 Java 代理吗?

java.lang.ArrayIndexOutOfBoundsException : 0 when I try to access to the first argument of args parameters, 为什么?

java - 创建 JFileChooser 对话框时如何选择默认的 FileFilter?

java - mvc 和 GridBagLayout 中的 ActionPerformed 和 update(Model,Object)

java - 购买成功,但解码时出现 "Class not found": com. google.android.finsky.billing.lightpurchase.PurchaseParams

java - 如何将提醒的长度分成相等的部分?