<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    TWaver - 專注UI技術

    http://twaver.servasoft.com/
    posts - 171, comments - 191, trackbacks - 0, articles - 2
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    讓JTextField添加“自動完成”功能 一文中收到了許多user 的反饋,其中有user提到需要能夠在下拉列表中同時顯示文字和圖片。要實現下拉列表的這種功能,不用太難,給ComboBox設置一個Renderer 即可,ComboBox的Renderer默認是一個JLabel,而JLabel 本身就有設置Icon的功能,所以直接用默認的Renderer,并設置上圖片即可,代碼如下:
     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 });

    在上面的代碼中,通過文字去查找對應的圖片,并設置Renderer 的Icon,其中getImageIcon方法如下,緩存了圖片資源,這樣不用每次刷新的時候去每次生成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

    評論

    # re: 讓JTextField添加“自動完成”功能(續)  回復  更多評論   

    2013-07-25 15:52 by 研究報告
    這篇文章好簡短 不過還不錯

    # re: 讓JTextField添加“自動完成”功能(續)  回復  更多評論   

    2013-07-26 17:36 by 行業報告
    博主好文 講的很不錯 謝謝博主分享

    # re: 讓JTextField添加“自動完成”功能(續)  回復  更多評論   

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

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲一区AV无码少妇电影| 亚洲乱人伦精品图片| 免费看国产一级特黄aa大片| 免费一级特黄特色大片在线 | 中文字幕在线观看免费视频 | 亚洲av永久无码| 一级人做人a爰免费视频| 97青青草原国产免费观看| 久久久久免费看黄A片APP| 国产精品亚洲产品一区二区三区| 亚洲国产精品免费视频| 亚洲欧美日韩中文字幕一区二区三区| 97在线免费视频| 天天干在线免费视频| 亚洲国产精品无码久久一线 | 日韩一级片免费观看| 国产在线观看片a免费观看| 亚洲日本va在线视频观看| 亚洲欧美日韩综合久久久| 国产成人aaa在线视频免费观看| 久久精品国产精品亚洲色婷婷| 亚洲Av永久无码精品黑人| 免费A级毛片无码A| a级毛片免费全部播放| 亚洲黄色网站视频| 一个人免费观看日本www视频| 亚洲精品无码Av人在线观看国产| MM1313亚洲国产精品| 日韩版码免费福利视频| 亚洲AV女人18毛片水真多| 久久久久亚洲精品天堂久久久久久| 在线aⅴ亚洲中文字幕| 亚洲国产综合精品中文字幕 | 在线观看亚洲专区| 中文字幕影片免费在线观看| 亚洲AV无码一区二区乱孑伦AS| 久久国产色AV免费看| 久久久久亚洲精品无码网址色欲 | 亚洲Av永久无码精品三区在线| 嘿嘿嘿视频免费网站在线观看| 亚洲AV无码码潮喷在线观看 |