一、问题:

一个程序,组件上设置某个图片作为图标,因为的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)   设置由此图标显示的图像。
三、关键性代码

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

四、程序实例

    1. /*java中设置图片自适应Jlable的大小*/
    2. package test1;
    3. import javax.swing.*;
    4. import java.awt.Image;
    5. public class ImageSetTest extends JFrame {
    6. private JLabel jlb = new JLabel();
    7. private ImageIcon image;
    8. private int width = 400, height = 400;
    9. public ImageSetTest() {
    10. this.setSize(800, 600);
    11. this.setLayout(null);
    12. image = new ImageIcon("image/img1.jpg");
    13. // image.setImage(image.getImage().getScaledInstance(width, height,Image.SCALE_DEFAULT));
    14. Image img = image.getImage();
    15. img = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
    16. image.setImage(img);
    17. jlb.setIcon(image);
    18. this.add(jlb);
    19. jlb.setSize(width, height);
    20. this.setVisible(true);
    21. }
    22. public static void main(String[] args) {
    23. new ImageSetTest();
    24. }
    25. }

(转) JAVA中如何设置图片(图标)自适应Jlable等组件的大小的更多相关文章

  1. 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移

    解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...

  2. java中如何把图片转换成二进制流的代码

    在学习期间,把开发过程经常用到的一些代码段做个备份,下边代码内容是关于java中如何把图片转换成二进制流的代码,应该能对各朋友也有用处. public byte[] SetImageToByteArr ...

  3. Android代码中动态设置图片的大小(自动缩放),位置

    项目中需要用到在代码中动态调整图片的位置和设置图片大小,能自动缩放图片,用ImageView控件,具体做法如下: 1.布局文件 <RelativeLayout xmlns:android=&qu ...

  4. java中如何设置下载文件

    如果想要设置某一url为下载文件的方法如下 需要设置文件响应类型,使用response.setContentType,比如jpeg格式的图片.如果想要访问该页面时出现下载保存的窗口,使用respons ...

  5. JAVA中pdf转图片的方法

    JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文, ...

  6. Java中权限设置

    package think_in_java_access_contorl; import think_in_java_access_contorl.access.Cookie; /** * 1.在Ja ...

  7. Java Swing 如何设置图片大小

    如下两行代码搞定: Image image = new ImageIcon("Img/ackground.jpg").getImage();// 这是背景图片 .png .jpg ...

  8. java中网络设置代理

    三种方式: 1.JVM启动时加参数设置代理 在系统启动时,使用-D项来设置代理. 例如: java -Dhttp.ProxyHost="proxyUrl" -Dhttp.Proxy ...

  9. java 中 SVN 设置所有文件及子目录 needs-lock, svn 提交时自动设置 needs-lock, 及版本不一致问题

    摘自: http://my.oschina.net/zhangzhihao/blog/72177 设置后的效果:文件会自动带上svn:needs-lock属性,默认是只读的要签出才能修改以防止修改完后 ...

随机推荐

  1. vtkQuadric创建二次曲面

    在本实例中,我们将用到vtkQuadric.vtkSampleFunction.vtkContourFilter三个类,分别是二次曲面函数.函数曲面抽样和等高滤波. vtkQuadric负责二次曲面基 ...

  2. 欢迎使用CSDN-markdown编辑器

    私有变量和函数 在函数内部定义的变量和函数,如果不对外提供接口,外部是无法访问到的,也就是该函数的私有的变量和函数. function Box(){ var color = "blue&qu ...

  3. 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚

    题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...

  4. 利用box-shadow实现伪边框透明到图片

    前阵子突然看到了一个效果,一张图片,有一个边框,但是边框可以透明到图片.直接上图 贴代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...

  5. Visual Studio 默认保存为UTF8编码

    Visual Studio (中文版)默认保存的文本文件是GB2312编码(代码页936)的,默认的行尾(End of line)是CRLF的. 如果仅仅是在windows下开发问题也不大,但是涉及到 ...

  6. 手写一个allocator

    似乎就像是一个计算机原理的实践.. 首先介绍一下大多数操作系统的内存架构..对于某个程序它会认为自己是独占了整个系统的所有内存在运行的这样才能方便移植,因此人们搞出了虚拟内存和物理内存的区别,于是人们 ...

  7. android分页请求,重复数据如何处理

    1.如图 如图上的ks031数据,在数据请求时,第一次请求20条数据,再次加载下一页20条数据时,后台的数据处理导致ks031排序到了第2页,出现加载重复现象, 这种情况则是怎么处理? 有谁明白,求指 ...

  8. jquery插件封装成seajs模块

    jquery直接在html中引入. jquery插件修改为: define(function (require, exports, moudles) { return function (jquery ...

  9. AtomicBoolean介绍与使用

       java.util.concurrent.atomic.AtomicBoolean 继承自Object. 介绍: 在这个Boolean值的变化的时候不允许在之间插入,保持操作的原子性 方法和举例 ...

  10. [转] 有java基础的人如何转行做大数据?

    数据有两个方向,一个是偏计算机的,另一个是偏经济的.你学过Java,所以你可以偏将计算机基础1. 读书<Introduction to Data Mining>,这本书很浅显易懂,没有复杂 ...