<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();  回復  更多評論
      

    主站蜘蛛池模板: 在线亚洲午夜片AV大片| 久久夜色精品国产亚洲av| 亚洲成在人线aⅴ免费毛片| 日本一卡精品视频免费| 一级毛片免费观看不卡的| 久久免费观看国产精品88av| 免费萌白酱国产一区二区三区| 成人久久免费网站| 久久久久国产精品免费免费不卡| 嫩草成人永久免费观看 | 亚洲国产精品高清久久久| 亚洲精品国产精品乱码不99| 亚洲五月综合缴情在线观看| 亚洲熟妇丰满多毛XXXX| 国产亚洲美女精品久久久久狼 | 三年片在线观看免费大全| 最近免费中文字幕视频高清在线看| 男女免费观看在线爽爽爽视频 | 91福利免费视频| 91成人免费在线视频| 最近2019中文字幕mv免费看| 免费高清在线影片一区| 亚洲 小说区 图片区 都市| 久久久青草青青国产亚洲免观| 国产亚洲一区二区手机在线观看| 亚洲自偷自偷精品| 亚洲中文字幕在线无码一区二区| 亚洲日韩精品无码专区| 新最免费影视大全在线播放| 99久久免费国产特黄| 亚洲免费观看在线视频| 夜夜嘿视频免费看| 国产精品亚洲αv天堂无码| 亚洲国产天堂久久综合网站| 456亚洲人成影院在线观| 日本亚洲高清乱码中文在线观看| 一级毛片免费视频网站| 亚洲免费黄色网址| 又粗又硬又黄又爽的免费视频 | 日韩免费毛片视频| 久久久久无码专区亚洲av|