栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JSwing背景图大小自适应

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSwing背景图大小自适应

正文

描述:使背景图跟着Jframe大小的改变而改变的Java实现

实现步骤:重写JLabel中的Paint方法+给Jframe添加一个组件监听器
  1. 重写paint方法,调用drawImage方法根据JLabel的大小绘制图片

  2. 给Jframe添加一个ComponentListener,监听Jframe的大小是否改变。若改变,则重新设置JLabel的大小,使之等于Jframe的大小,并调用repaint()方法。注:repaint()方法会自动调用paint方法.

完整实现代码:
package first;

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

public class ImageSize extends Jframe{
	public ImageSize() {
		super("背景图自适应");
		
		ImageIcon ii=new ImageIcon("bg2.jpg");  //图标
		
		JLabel bg=new JLabel(ii) {   // 匿名类部类重写paint方法
			public void paint(Graphics g) {
				Image img=ii.getImage();
				g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
			}
		};
		
		this.getLayeredPane().add(bg,Integer.valueOf(Integer.MIN_VALUE)); //放到最底层,作为背景图片
		JPanel showPanel=(JPanel)this.getContentPane(); //之所以要转换,因为ContentPane没有setOpaque方法
		showPanel.setOpaque(false); // 设置成透明的
		JLabel motto=new JLabel("不相信有完成不了的任务,不相信有克服不了的困难",JLabel.CENTER);
		motto.setFont(new Font("黑体",Font.BOLD,20));
		motto.setForeground(Color.white);
		showPanel.add(motto,BorderLayout.NORTH);
		
		this.addComponentListener(new ComponentAdapter() {
			public void componentResized(ComponentEvent e) {  //监测整个框架大小是否改变
				bg.setSize(ImageSize.this.getSize());
				bg.repaint();  //重绘,会自动调用paint方法
			}
		});
		
		this.setSize(ii.getIconWidth(),ii.getIconHeight()); // 图片多大,框架就多大
		bg.setSize(this.getSize());  // label大小等于frame的大小
		this.setVisible(true);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
	}
	public static void main(String args[]) {
		new ImageSize();
	}
}
效果展示

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489123.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号