在JFrame中设置背景图像

时间:2009-06-30 17:35:20

标签: java image swing background jframe

是否有任何方法可以将图片设置为JFrame中的背景?

4 个答案:

答案 0 :(得分:39)

没有内置方法,但有几种方法可以做到。我目前最直接的想法是:

  1. 创建JComponent
  2. 的子类
  3. 覆盖paintComponent(Graphics g)方法以绘制要显示的图像。
  4. Set the content pane JFrame成为此子类。
  5. 一些示例代码:

    class ImagePanel extends JComponent {
        private Image image;
        public ImagePanel(Image image) {
            this.image = image;
        }
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }
    }
    
    // elsewhere
    BufferedImage myImage = ImageIO.read(...);
    JFrame myJFrame = new JFrame("Image pane");
    myJFrame.setContentPane(new ImagePanel(myImage));
    

    请注意,此代码无法处理调整图像大小以适合JFrame,如果这是您想要的。

答案 1 :(得分:18)

试试这个:

import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        try {
            f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("test.jpg")))));
        } catch (IOException e) {
            e.printStackTrace();
        }
        f.pack();
        f.setVisible(true);
    }

}

顺便说一下,这将导致内容窗格不是容器。如果要向其添加内容,则必须子类化JPanel并覆盖paintComponent方法。

答案 2 :(得分:6)

您可以使用Background Panel课程。它执行如上所述的自定义绘制,但为您提供显示缩放,平铺或正常大小的图像的选项。它还解释了如何将带有图像的JLabel用作框架的内容窗格。

答案 3 :(得分:0)

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

class BackgroundImageJFrame extends JFrame
{

    JButton b1;
    JLabel l1;

    public BackgroundImageJFrame() {

        setSize(400,400);
        setVisible(true);

        setLayout(new BorderLayout());

        JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful_design.png"));

        add(background);

        background.setLayout(new FlowLayout());

        l1=new JLabel("Here is a button");
        b1=new JButton("I am a button");

        background.add(l1);
        background.add(b1);
    }

    public static void main(String args[]) 
    {
        new BackgroundImageJFrame();
    }
}

查看以下链接

http://java-demos.blogspot.in/2012/09/setting-background-image-in-jframe.html