JAVA中如何设置图片(图标)自适应Jlable等组件的大小

一、问题:

一个程序,组件上设置某个图片作为图标,因为的label(应该说是组件)已经设定了固定大小,
所以再打开一些大图片时,超过组件大小的部分没显示出来,而小图片又没填充完整个组件


二、解决这个问题,需要用到两个类:

java.awt.Image类
javax.swing.ImageIcon类


1.java.awt.Image是个抽象类,这个过程中用到的参数和函数如下:
(1)static int SCALE_DEFAULT    表示默认的图像缩放算法。
(2)public Image getScaledInstance(int width,int height,int hints)
创建此图像的缩放版本。返回一个新的 Image 对象,默认情况下,该对象按指定的 width 和 height 呈现图像。即使已经完全加载了初始源图像,新的 Image 对象也可以被异步加载。
如果 width 或 height 为负数,则替换该值以维持初始图像尺寸的高宽比。如果 width 和 height 都为负,则使用初始图像尺寸。

参数:
width - 将图像缩放到的宽度。
height - 将图像缩放到的高度。
hints - 指示用于图像重新取样的算法类型的标志。
返回:
图像的缩放版本。


2.javax.swing.ImageIcon类
(1)这儿用到这个构造函数:
ImageIcon(String filename)        根据指定的文件创建一个 ImageIcon对象
(2)Image getImage()             返回此图标的 Image。
(3)void setImage(Image image)   设置由此图标显示的图像。


三、关键性代码

JLabel jlb = new JLabel();	//实例化JLble
int width = 50,height = 50;	//这是图片和JLable的宽度和高度
ImageIcon image = new ImageIcon("image/img1.jpg");//实例化ImageIcon 对象
/*下面这句意思是:得到此图标的 Image(image.getImage());
在此基础上创建它的缩放版本,缩放版本的宽度,高度与JLble一致(getScaledInstance(width, height,Image.SCALE_DEFAULT ))
最后该图像就设置为得到的缩放版本(image.setImage)
*/
image.setImage(image.getImage().getScaledInstance(width, height,Image.SCALE_DEFAULT ));//可以用下面三句代码来代替
//Image img = image.getImage();
//img = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
//image.setImage(img);
jlb.setIcon(image);
jlb.setSize(width, height);

四、程序实例

/*java中设置图片自适应Jlable的大小*/
package test1;

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

public class ImageSetTest extends JFrame {
	private JLabel jlb = new JLabel();
	private ImageIcon image;
	private int width = 400, height = 400;

	public ImageSetTest() {
		this.setSize(800, 600);
		this.setLayout(null);

		image = new ImageIcon("image/img1.jpg");
		// image.setImage(image.getImage().getScaledInstance(width, height,Image.SCALE_DEFAULT));
		Image img = image.getImage();
		img = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
		image.setImage(img);
		jlb.setIcon(image);

		this.add(jlb);
		jlb.setSize(width, height);
		this.setVisible(true);
	}

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




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值