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();
    }
}

效果如下:
在这里插入图片描述



(二)

利用标签组件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();
    }
}

效果如下:
在这里插入图片描述

二、方法比较

  1. 第一种方法相对复杂,第二种方法相对简单。
  2. 第一种方法设置布局方式应在设为内容面板之后有效,第二种方法无限制。
  3. 第一种方法 的图片显示完整,第二种则是局部显示,相当于放大。
  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值