TWaver - 專注UI技術(shù)

          http://twaver.servasoft.com/
          posts - 171, comments - 191, trackbacks - 0, articles - 2
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          日歷

          <2013年7月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          新聞檔案(1)

          相冊(cè)

          搜索

          •  

          最新評(píng)論

          讓JTextField添加“自動(dòng)完成”功能 一文中收到了許多user 的反饋,其中有user提到需要能夠在下拉列表中同時(shí)顯示文字和圖片。要實(shí)現(xiàn)下拉列表的這種功能,不用太難,給ComboBox設(shè)置一個(gè)Renderer 即可,ComboBox的Renderer默認(rèn)是一個(gè)JLabel,而JLabel 本身就有設(shè)置Icon的功能,所以直接用默認(rèn)的Renderer,并設(shè)置上圖片即可,代碼如下:
           1 cbInput.setRenderer(new DefaultListCellRenderer(){
           2     public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
           3         super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
           4         if(value != null){
           5             this.setText(value.toString());
           6             String url = value.toString().replaceAll(" ", "_") + ".png";
           7             ImageIcon icon = getImageIcon(url, IMAGE_ICON_CACHE);
           8             if(icon != null){
           9                 this.setIcon(icon);
          10             }
          11         }
          12         return this;
          13     }
          14 });

          在上面的代碼中,通過(guò)文字去查找對(duì)應(yīng)的圖片,并設(shè)置Renderer 的Icon,其中g(shù)etImageIcon方法如下,緩存了圖片資源,這樣不用每次刷新的時(shí)候去每次生成ImageIcon:
           1 public static ImageIcon getImageIcon(String url,Map IMAGE_ICON_CACHE) {
           2         if (url == null) {
           3             return null;
           4         }
           5         if (IMAGE_ICON_CACHE.get(url) == null) {
           6             ImageIcon image = null;
           7             InputStream in =ResourceAgent.class.getResourceAsStream(url);
           8             if (in != null) {
           9                 try {
          10                     byte buffer[] = new byte[in.available()];
          11                     for (int i = 0, n = in.available(); i < n; i++) {
          12                         buffer[i] = (bytein.read();
          13                     }
          14                     Toolkit toolkit = Toolkit.getDefaultToolkit();
          15                     Image img = toolkit.createImage(buffer);
          16                     image = new ImageIcon(img);
          17                     in.close();
          18                 } catch (IOException ex) {
          19                     ex.printStackTrace();
          20                     return null;
          21                 }
          22             }
          23             if (image == null) {
          24                 if (ClassLoader.getSystemResource(url) != null) {
          25                     image = new ImageIcon(ClassLoader.getSystemResource(url));
          26                 } else {
          27                     image = new ImageIcon(url);
          28                 }
          29             }
          30             if (image == null) {
          31                 System.err.println("can't load image '" + url + "'");
          32             } else {
          33                 IMAGE_ICON_CACHE.put(url, image);
          34             }
          35         }
          36         return (ImageIcon) IMAGE_ICON_CACHE.get(url);
          37     }
          38 
          效果如下:

          全部代碼: Source Code

          評(píng)論

          # re: 讓JTextField添加“自動(dòng)完成”功能(續(xù))  回復(fù)  更多評(píng)論   

          2013-07-25 15:52 by 研究報(bào)告
          這篇文章好簡(jiǎn)短 不過(guò)還不錯(cuò)

          # re: 讓JTextField添加“自動(dòng)完成”功能(續(xù))  回復(fù)  更多評(píng)論   

          2013-07-26 17:36 by 行業(yè)報(bào)告
          博主好文 講的很不錯(cuò) 謝謝博主分享

          # re: 讓JTextField添加“自動(dòng)完成”功能(續(xù))  回復(fù)  更多評(píng)論   

          2013-12-30 10:25 by 渣漿泵
          要實(shí)現(xiàn)下拉列表的這種功能,不用太難,給ComboBox設(shè)置一個(gè)Renderer 即可

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 方正县| 怀柔区| 阳西县| 舟山市| 高邮市| 彩票| 道孚县| 玉树县| 栾川县| 庄浪县| 晋州市| 定州市| 赣榆县| 锦州市| 邛崃市| 南丹县| 三原县| 巴楚县| 平凉市| 平武县| 饶平县| 赣州市| 乐清市| 博湖县| 德钦县| 旌德县| 西乌| 汕尾市| 根河市| 酉阳| 平和县| 千阳县| 宿松县| 赤水市| 叶城县| 瓦房店市| 内乡县| 凌云县| 府谷县| 林西县| 法库县|