前面提过,AWT没提供能够直接显示图像的控件,这无疑是个令人诟病的短板,因为一上来就得由程序员自己去定义新控件,对于初学者来讲很不友好。这个问题在Swing中也解决掉了,不过Swing并未提供单独的图像视图,而是利用标签控件JLabel来显示图像。JLabel的setText方法用来设置标签上的文本,而setIcon方法用来设置标签上的图标,根据两个方法的调用与否状况,标签所展示的内容可分为下列三种情况:
1、只调用setText方法,未调用setIcon方法,此时标签只显示文本。
2、只调用setIcon方法,未调用setText方法,此时标签只显示图像。
3、既调用setText方法,又调用setIcon方法,此时标签同时显示文本和图像,且图像在左边、文本在右边,即左图右文。
然而setIcon方法的输入参数却是Icon图标类型,并非早前介绍的缓存图像BufferedImage,这意味着需要把缓存图像转换为图标类型。其中的转换过程用到了图像图标工具ImageIcon,由于该工具实现了Icon接口,因此它的实例可以作为setIcon方法的输入参数。通过ImageIcon的构造方法,就能把缓存图像转为图标对象,具体的转换代码如下所示:
// 把图片文件读到缓存图像
BufferedImage image = ImageIO.read(new File("E:/apple.png"));
ImageIcon icon = new ImageIcon(image); // 创建一个图标
当然,ImageIcon本身是个图标工具,读取图片文件何必要经过缓存图像倒腾两手呢?直接去指定的文件路径读取便是。于是依据图片文件创建图标对象的代码变