zoukankan      html  css  js  c++  java
  • Java开发笔记(一百二十八)Swing的图标

    前面提过,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本身是个图标工具,读取图片文件何必要经过缓存图像倒腾两手呢?直接去指定的文件路径读取便是。于是依据图片文件创建图标对象的代码变成了下面这样:

    		ImageIcon icon = new ImageIcon("E:/apple.png"); // 创建一个指定路径的图标
    

    可是构造方法传入字符串算什么意思?难道字符串一定是文件路径吗?显然传入字符串的方式并不严谨。更好的做法是传入一个URL地址对象,明明白白地告诉编译器,构造方法的输入参数必须是个合法的文件地址,就像以下代码表达的那样:

    		URL url = new URL("file:///E:/apple.png"); // 创建一个本地路径的URL对象
    		ImageIcon icon = new ImageIcon(url); // 创建一个指定URL的图标
    

    注意到构建URL对象的时候,文件路径字符串添加了前缀“file:///”,表示该串为本地的文件路径。除了本地文件,URL对象还能用来表达网络文件,只需将网络文件的完整http地址传进去即可,此时根据网络图片创建图标对象的代码示例如下:

    		URL url = new URL("https://profile.csdnimg.cn/C/1/5/1_aqi00"); // 创建一个网络地址的URL对象
    		ImageIcon icon = new ImageIcon(url); // 创建一个来自网络图片的图标
    

    上述的几种构造方法,都能用来创建图标对象。获取到图标对象之后,就能调用setIcon方法在标签控件显示图像,还能调用setIconTextGap方法设置图标与文字之间的空白距离。
    接下来分别看看在标签上显示图像与文本的组合结果,首先,只显示图像不显示文本,则标签控件的方法调用代码示例如下:

    		ImageIcon icon = new ImageIcon("E:/apple.png"); // 创建一个指定路径的图标
    		label.setIcon(icon); // 设置标签的图标
    		label.setText(null); // 设置标签的文本为空,此时不显示文本
    

    运行以上的测试代码,弹出的窗口界面如下图所示,可见标签上的图像居中展示。


    其次,准备同时显示图像与文本,则标签控件的setIcon方法和setText方法均应指定非空对象,此时调用代码如下所示:

    		ImageIcon icon = new ImageIcon("E:/apple.png"); // 创建一个指定路径的图标
    		label.setIcon(icon); // 设置标签的图标(图标在文字左边)
    		label.setIconTextGap(10); // 设置图标与文字之间的间隔大小
    		label.setText("这是一个苹果"); // 设置标签的文本
    

    运行以上的测试代码,弹出的窗口界面如下图所示,可见图像和文本都显示了出来。


    再次,不显示图像只显示文本,则标签控件的调用代码如下所示:

    		label.setIcon(null); // 设置标签的图标为空,此时不显示图像
    		label.setText("这是一个苹果"); // 设置标签的文本
    

    运行以上的测试代码,弹出的窗口界面如下图所示,可见JLabel控件变为常规的文本标签了。

     



    更多Java技术文章参见《Java开发笔记(序)章节目录

  • 相关阅读:
    BZOJ 2016十连测 D3T3序列
    Luogu3579 Solar Panels
    POI2014解题报告
    BZOJ4377 Kurs szybkiego czytania Luogu 3589[POI2015]KUR
    Luogu3587[POI2015]POD
    BZOJ4386[POI2015]Wycieczki / Luogu3597[POI2015]WYC
    BZOJ4381 : [POI2015]Odwiedziny / Luogu3591[POI2015]ODW
    HDU 1133 Buy the ticket
    HDU RPG的错排 【错排&&组合】
    【转】求逆元的n种方法
  • 原文地址:https://www.cnblogs.com/pinlantu/p/11240944.html
Copyright © 2011-2022 走看看