Java--Swing设置窗体图片背景

一、方法介绍

(一)

自定义一个ImagePanel,重写paintComponent方法,然后应用窗体中设置为contentPane即可。

(1) ImagePanel.java
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImagePanel extends JPanel {
    // 图片宽度
    private int width;
    // 图片高度
    private int height;
    // 图片
    private BufferedImage image = null;

    public ImagePanel(int width, int height, String path) {
        super();
        // 设置宽高
        this.width = width;
        this.height = height;
        try {
            // 读取图片
            image = ImageIO.read(new File(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        g.drawImage(image,0,0,width,height,this);
    }
}

(2) TestFrame.java
import javax.swing.*;
import java.awt.*;

public class TestFrame extends JFrame {
    private static final String IMAGE_PATH = "./images/background.png";
    private ImagePanel imagePanel;

    public TestFrame() {
        // 设置窗体位置和大小
        setBounds(500,300,500,500);
        // 窗体关闭方式
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 



		// 以下为重点代码
        // 图片面板
        imagePanel = new ImagePanel(500,500,IMAGE_PATH);
        setContentPane(imagePanel);
        // 布局方式需设置后更改
        setLayout(null);


        // 标签
        JLabel label = new JLabel("AFAFASFASFAS");
        label.setFont(new Font("微软雅黑",Font.PLAIN,40));
        label.setBounds(100,100,300,30);
        getContentPane().add(label);
        setVisible(true);
    }

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

效果如下:
Java--Swing设置窗体图片背景_第1张图片



(二)

利用标签组件JLabel包含图片,然后将标签组件JLabel添加到分层面板最底层,最后将内容面板设为透明即可。

import javax.swing.*;
import java.awt.*;

public class TestFrame extends JFrame {
    private static final String IMAGE_PATH = "./images/background.png";
    private ImagePanel imagePanel;

    public TestFrame() {
        // 设置窗体位置和大小
        setBounds(500,300,500,500);
        // 窗体关闭方式
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);


        // 以下为重点代码
		setLayout(null);
        ImageIcon imageIcon = new ImageIcon(IMAGE_PATH);
        JLabel image_label = new JLabel(imageIcon);
        image_label.setBounds(0, 0, 500,500);
        // 添加到分层面板最底层
        this.getLayeredPane().add(image_label, new Integer(Integer.MIN_VALUE));
        // 内容面板设为透明
        ((JPanel) getContentPane()).setOpaque(false);



        // 标签
        JLabel label = new JLabel("AFAFASFASFAS");
        label.setFont(new Font("微软雅黑",Font.PLAIN,40));
        label.setBounds(100,200,300,30);
        getContentPane().add(label);
        setVisible(true);
    }

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

效果如下:
Java--Swing设置窗体图片背景_第2张图片

二、方法比较

  1. 第一种方法相对复杂,第二种方法相对简单。
  2. 第一种方法设置布局方式应在设为内容面板之后有效,第二种方法无限制。
  3. 第一种方法 的图片显示完整,第二种则是局部显示,相当于放大。

你可能感兴趣的:(Java)