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

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

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

    有才華的人,別忘記給滋潤你的那塊土壤施肥

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      28 隨筆 :: 5 文章 :: 147 評論 :: 0 Trackbacks
        
        需要做一個可編輯的JComboBox,即可以在里面輸入查找,也可以選擇下拉框選擇。但兩者都必須在操作完后,comboBox的輸入框都必須高亮顯示,如圖:

                                                     

    但是把鼠標點擊輸入框或者在里面輸入數字按回車進行匹配時,都可是得輸入框高亮顯示,但是按那個下拉框按鈕進行選擇時卻不能使其高亮顯示,不知道怎么會事,希望高手指點。

    以下為測試代碼:
    package kissJava.JComboBox;
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.util.Vector;
    import javax.swing.ComboBoxEditor;
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    public class EditComboBox{
         String labels[] 
    = "Chardonnay""Sauvignon""Riesling""Cabernet",
                    
    "Zinfandel""Merlot""Pinot Noir""Sauvignon Blanc",
                    
    "Syrah""Gewurztraminer" }
    ;
          String code[] 
    = "1""2""3""4","5""6""7""8""9""10" };
         JComboBox comboBox 
    =null;
         
    final KJComboBoxEditor kjce = new KJComboBoxEditor();
         
    public EditComboBox(){
              JFrame frame 
    = new JFrame("Editable JComboBox");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              Container contentPane 
    = frame.getContentPane();
              comboBox 
    = new JComboBox();
              comboBox.setMaximumRowCount(
    5);  
              comboBox.setEditable(
    true);
              initCombox();  
              comboBox.setEditor(kjce);
              contentPane.add(comboBox, BorderLayout.NORTH);  
              
    final JTextArea textArea = new JTextArea();
              JScrollPane scrollPane 
    = new JScrollPane(textArea);
              contentPane.add(scrollPane, BorderLayout.CENTER);
              ActionListener actionListener 
    = new ActionListener() {
                 
    public void actionPerformed(ActionEvent actionEvent) {
                      textArea.append(
    "Selected: " + comboBox.getSelectedItem());
                      textArea.append(
    ", Position: " + comboBox.getSelectedIndex());
                      textArea.append(System.getProperty(
    "line.separator"));
                      comboBox.requestFocus();
                      kjce.selectAll();
                 }

              }
    ;
             comboBox.addActionListener(actionListener);
             frame.setSize(
    300200);
             frame.setVisible(
    true);
      }

      
    private void initCombox(){
          
    final Vector<String> v = new Vector<String>(code.length);
          String[] str 
    = new String[code.length];
          
    for(int i = 0,length = code.length; i<length;i++{
                  str[i] 
    = code[i] + " - " + labels[i];
                  v.add(str[i]);            
          }

          comboBox.setModel(
    new DefaultComboBoxModel(v));
      }

      
    public static void main(String args[]) {
        
    new EditComboBox();
      }

      
    class KJComboBoxEditor implements ComboBoxEditor {    
        JTextField jtf 
    = new JTextField();    
        
    public KJComboBoxEditor(){
            jtf.addActionListener(
    new java.awt.event.ActionListener(){
                
    public void actionPerformed(ActionEvent e) {
                    
    boolean isExit = false;
                    String codeStr 
    = jtf.getText().trim();
                    
    for(int i = 0,length = code.length; i<length;i++{
                         
    if(codeStr.equals(code[i])){
                            
    //jtf.setText(code[i] + " - " + labels[i]);
                             setItem(code[i] + " - " + labels[i]);
                             comboBox.setSelectedIndex(i);
                             isExit 
    = true;
                         }
                      
                    }

                     
    if(!isExit)
                         jtf.setText(
    ""); 
                     }

                     selectAll();                 
                }
        
            }
    );
        
            jtf.addMouseListener(
    new java.awt.event.MouseListener(){
                
    public void mouseClicked(MouseEvent e) {
                    selectAll();
                    comboBox.setPopupVisible(
    false);
                }

                
    public void mouseEntered(MouseEvent e) {    
                }

                
    public void mouseExited(MouseEvent e) {        
                }

                
    public void mousePressed(MouseEvent e) {
                    selectAll(); 
                    comboBox.setPopupVisible(
    false);
                }

                
    public void mouseReleased(MouseEvent e) {    
                    selectAll(); 
                }
            
            }
    );
        }

        
    public void addActionListener(ActionListener l) {
        }

        
    public JTextField getEditorComponent() {
            
    return jtf;
        }

        
    public Object getItem() {        
            
    return jtf.getText();
        }

        
    public void removeActionListener(ActionListener l) {    
        }

        
    public void selectAll() {    
            jtf.selectAll();
            jtf.requestFocus();
            
        }

        
    public void setItem(Object anObject) {        
            jtf.setText(anObject.toString());
        }
      
      }

    }
    posted on 2008-04-02 15:27 kissjava 閱讀(2414) 評論(3)  編輯  收藏 所屬分類: swing

    評論

    # re: 如何使可編輯的JComboBox的輸入框高亮顯示? 2008-04-02 16:40 枯寬
    自己頂一下
    為什么調用了KJComboBoxEditor 的selectAll()方法,他就是不高亮顯示呢?  回復  更多評論
      

    # re: 如何使可編輯的JComboBox的輸入框高亮顯示? 2008-04-03 10:00 枯寬
    想了好久,沒辦法只好拿他的JComboBox自己的Editor:(JTextComponent)comboBox.getEditor().getEditorComponent()。這樣就能滿足要求,都可以實現高亮顯示。

    但不知道為什么自己實現的ComboBoxEditor 明明調用了selectAll()方法,卻不高亮顯示,有待拷之。。。  回復  更多評論
      

    # re: 如何使可編輯的JComboBox的輸入框高亮顯示? 2011-04-13 14:27 zerone
    我用以下方法解決了,也就是在selectAll()后調用requestFocusInWindow()即可。
    textArea.requestFocusInWindow();  回復  更多評論
      

    主站蜘蛛池模板: 成人黄18免费视频| 亚洲高清国产AV拍精品青青草原 | www永久免费视频| 久久久久免费看成人影片| 亚洲午夜久久久影院伊人| 亚洲综合久久精品无码色欲| 一个人免费视频观看在线www| 午夜免费福利视频| 免费国产小视频在线观看| 亚洲精品视频专区| 亚洲三级在线免费观看| 亚洲av乱码一区二区三区香蕉| 噼里啪啦免费观看高清动漫4| 亚洲成在人线av| 国产h视频在线观看网站免费| 久久99亚洲综合精品首页| 四虎必出精品亚洲高清| 免费观看a级毛片| 亚洲精品第五页中文字幕| 和日本免费不卡在线v| 亚洲色大成网站www尤物| 免费永久国产在线视频| 日韩av无码免费播放| 亚洲精品无码久久久久久久| 在线观看成人免费| fc2免费人成为视频| 免费A级毛片无码久久版| 精品熟女少妇aⅴ免费久久 | 国产精品亚洲精品日韩动图| 亚洲伊人久久综合中文成人网| 亚洲AV无码一区二区三区网址| 亚洲精品一级无码鲁丝片 | 亚洲一区二区电影| 大地资源免费更新在线播放| 人妻巨大乳hd免费看| 日韩免费三级电影| 少妇性饥渴无码A区免费| 亚洲人成网站免费播放| 国产香蕉九九久久精品免费| 久久精品成人免费国产片小草| 亚洲欧洲精品久久|