关于JLabel的图片自适应

来源:互联网 发布:jenkins 构建php项目 编辑:程序博客网 时间:2024/04/29 21:56

好烦!又折腾了一下午,JLabel好讨厌!

众所周知,JLabel会根据添加的文字长度或者图片长度设置大小。在布局为null的组件里,可以使用setPreferredSize(Dimension)来设置其大小,可是我使用了该方法却无效。debug的时候,经过了该语句,JLabel长宽却一点变化都没有。

我程序的问题在于:我想要做一个剪切图片的效果,带有undo和redo。但是剪小了在JLabel显示出来了以后,想要undo,去看之前大的图像却发现只剩下被剪小的这一块了。于是debug,发现这时候的图片长度是没错的,是原来的大小,只不过JLabel的长度太小了,无法显示全部,所以看起来跟没有undo一样,只是改变了一下位置而已。

我改变JLabel里的图片的代码是这样写的,lbImage.setIcon(new ImageIcon(a));其中lbImage是 JLabel,a是BufferedImage。debug经过这里时,果然JLabel的大小没被改变,但是奇怪的是,之前重新显示新的变小的图片,debug经过那里时,JLabel的大小却跟着图片缩小了!于是我去研究了一下让图片变小的方法。发现该方法把之前JLabel里的image给替换成新的image了,然后再用该image来进行setIcon方法。在替换的那一步,JLabel的大小变大了!!于是总结如下:


在JLabel里进行不同大小图片的交替显示时,必须修改或替换掉之前的Image,而不是新建一个new ImageIcon(),否则大小不会变化!


JLabel为什么这么奇葩??

0 0
原创粉丝点击