Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 295|回复: 0

[Swing学习]有自动检查功能的CombBox

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-2 23:55:49 | 显示全部楼层 |阅读模式
    带有自动检查功能的CombBox,类似辅助输入。


    代码:
    1. import   java.awt.event.ItemEvent;     
    2. import   java.awt.event.ItemListener;     
    3. import   java.awt.event.KeyEvent;     
    4. import   java.awt.event.KeyListener;     
    5. import   java.util.List;     
    6. import   java.util.Vector;     
    7. import   javax.swing.ComboBoxModel;     
    8. import   javax.swing.DefaultComboBoxModel;     
    9. import   javax.swing.JComboBox;     
    10. import   javax.swing.JFrame;     
    11. import   javax.swing.JTextField;     
    12. /**
    13. * @author fb
    14. * 带有自动检查功能的CombBox
    15. */
    16. public   class   JAutoCompleteComboBox   extends   JComboBox   {     
    17.        private   AutoCompleter   completer;   

    18.        public   JAutoCompleteComboBox()   
    19.        {   
    20.                super();   
    21.                addCompleter();   
    22.        }   

    23.        public   JAutoCompleteComboBox(ComboBoxModel   cm)   {   
    24.                super(cm);   
    25.                addCompleter();   
    26.        }   
    27.          
    28.        public   JAutoCompleteComboBox(Object[]   items)   {   
    29.                super(items);   
    30.                addCompleter();   
    31.        }   
    32.          
    33.        public   JAutoCompleteComboBox(List   v)   {   
    34.                super((Vector)   v);   
    35.                addCompleter();   
    36.        }   

    37.        private   void   addCompleter()   {   
    38.                setEditable(true);   
    39.                completer   =   new   AutoCompleter(this);   
    40.        }   

    41.        public   void   autoComplete(String   str)   {   
    42.                this.completer.autoComplete(str,str.length());   
    43.        }   

    44.        public   String   getText()   {   
    45.                return   ((JTextField)   getEditor().getEditorComponent()).getText();   
    46.        }   

    47.        public   void   setText(String   text)   {   
    48.                ((JTextField)   getEditor().getEditorComponent()).setText(text);   
    49.        }   

    50.        public   boolean   containsItem(String   itemString)   
    51.        {   
    52.                for   (int   i   =   0;   i   <   this.getModel().getSize();   i++)   {   
    53.                        String   _item   =   ""   +   this.getModel().getElementAt(i);   
    54.                        if   (_item.equals(itemString))   
    55.                                return   true;   
    56.                }   
    57.                return   false;   
    58.        }   
    59.        /*
    60.         * 测试方法
    61.         */
    62.        public   static   void   main(String[]   args)   
    63.        {   
    64.                JFrame   frame   =   new   JFrame();   
    65.                Object[]   items   =   new   Object[] {   "abc",   "aab",   "aba",   "hpp",   "pp",   "hlp"   };   
    66.                //DefaultComboBoxModel   model   =   new   DefaultComboBoxModel();   
    67.                JComboBox   cmb   =   new   JAutoCompleteComboBox(items);   
    68. //                model.addElement("abc");   
    69. //                model.addElement("aab");   
    70. //                model.addElement("aba");   
    71. //                model.addElement("hpp");   
    72. //                model.addElement("pp");   
    73. //                model.addElement("hlp");   
    74.                frame.getContentPane().add(cmb);   
    75.                frame.setSize(400,   80);   
    76.                frame.setVisible(true);   
    77.        }   
    78. }     
    79.    
    80. /**     
    81. *   自动完成器。自动找到最匹配的项目,并排在列表的最前面。   
    82. *     
    83. *   @author   Turbo   Chen   
    84. */   

    85. class   AutoCompleter   implements   KeyListener,   ItemListener   {     

    86.        private   JComboBox   owner   =   null;   
    87.        private   JTextField   editor   =   null;   

    88. private   ComboBoxModel   model   =   null;     

    89.        public   AutoCompleter(JComboBox   comboBox)   
    90.        {   
    91.                owner   =   comboBox;   
    92.                editor   =   (JTextField)   comboBox.getEditor().getEditorComponent();   
    93.                editor.addKeyListener(this);   
    94. model   =   comboBox.getModel();     
    95.                owner.addItemListener(this);   
    96.        }   
    97.          
    98.        public   void   keyTyped(KeyEvent   e)   {   }   

    99.        public   void   keyPressed(KeyEvent   e)   {   }   

    100.        public   void   keyReleased(KeyEvent   e)   
    101.        {   
    102.                char   ch   =   e.getKeyChar();   
    103.                if   (ch   ==   KeyEvent.CHAR_UNDEFINED||Character.isISOControl(ch)||ch   ==   KeyEvent.VK_DELETE)   
    104.                        return;   

    105.                int   caretPosition   =   editor.getCaretPosition();   
    106.                String   str   =   editor.getText();   
    107.                if   (str.length()   ==   0)   
    108.                return;   
    109.                autoComplete(str,   caretPosition);   
    110.        }   
    111.          
    112.        /**   
    113.          *   自动完成。根据输入的内容,在列表中找到相似的项目.   
    114.          */   
    115.        protected   void   autoComplete(String   strf,   int   caretPosition)   
    116.        {   
    117.                Object[]   opts;   
    118.                opts   =   getMatchingOptions(strf.substring(0,   caretPosition));   
    119.                if   (owner   !=   null)   {   
    120.                model   =   new   DefaultComboBoxModel(opts);   
    121.                        owner.setModel(model);   
    122.                }   
    123.                if   (opts.length   >   0)   {   
    124.                        String   str   =   opts[0].toString();   
    125.                        editor.setCaretPosition(caretPosition);   
    126.                        if   (owner   !=   null)   {   
    127.                                try   {   
    128.                                        owner.showPopup();   
    129.                                }   catch   (Exception   ex)   {   
    130.                                        ex.printStackTrace();   
    131.                                }   
    132.                        }   
    133.                }   
    134.        }   
    135.          
    136.        /**   
    137.          *     
    138.          *   找到相似的项目,   并且将之排列到数组的最前面。   
    139.          *   @param   str     
    140.          *   @return   返回所有项目的列表。   
    141.          */   
    142.        protected   Object[]   getMatchingOptions(String   str)   
    143.        {   
    144.                List   v   =   new   Vector();   
    145.                List   v1   =   new   Vector();   
    146.                  
    147.                for   (int   k   =   0;   k   <   model.getSize();   k++)   {   
    148.                        Object   itemObj   =   model.getElementAt(k);   
    149.                        if   (   itemObj!=null   )   {   
    150.                                String   item   =   itemObj.toString().toLowerCase();   
    151.                                if   (item.startsWith(str.toLowerCase()))   
    152.                                        v.add(model.getElementAt(k));   
    153.                                else   
    154.                                        v1.add(model.getElementAt(k));   
    155.                        }else   
    156.                                v1.add(model.getElementAt(k));   
    157.                }   
    158.                for   (int   i   =   0;   i   <   v1.size();   i++)   {   
    159.                        v.add(v1.get(i));   
    160.                }   
    161.                if   (v.isEmpty())   
    162.                        v.add(str);   
    163.                return   v.toArray();   
    164.        }   
    165.        public   void   itemStateChanged(ItemEvent   event)   
    166.        {   
    167.                if   (event.getStateChange()   ==   ItemEvent.SELECTED)   
    168.                {   
    169.                        int   caretPosition   =   editor.getCaretPosition();   
    170.                        if   (caretPosition   !=   -1)   {   
    171.                                try   {   
    172.                                        editor.moveCaretPosition(caretPosition);   
    173.                                }   catch   (IllegalArgumentException   ex)   {   
    174.                                        ex.printStackTrace();   
    175.                                }   
    176.                        }   
    177.                }   
    178.        }   
    179. }
    复制代码

      
       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/2/235548734.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 15:59 , Processed in 0.337644 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表