JTextField根据输入,实现自动获取内容

      前面做了个程序需要JTextField自动获取内容,谷歌了一下,发现有俩个文章,不错,但没有完整的源码,自己搞俩天搞了出来,

和大家分享,但还有些缺陷(运行一下程序,就知道了)。

ps:程序,我是测试这个自动获取内容的功能时,写的,所以比较粗狂

 

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
/*当在文本框中输入,文本框输入内容时,文本框的下面自动出现可选择的,
有输入内容相关的下拉列表供选择*/

public class Auto{
 DefaultComboBoxModel model=new DefaultComboBoxModel();
 JComboBox combobox=new JComboBox(model){
  public Dimension getPreferredSize(){
   return new Dimension(super.getPreferredSize().width,0);
  }//设置下拉列表的高度为0
 };
 public Auto(){
  JFrame f=new JFrame("关于文本域自动添加");
  Container p=f.getContentPane();
  f.setSize(600,800);
  f.setVisible(true);
  f.setLocation(600,500);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  final JTextField field=new JTextField(10);
        JButton b1=new JButton("按一下吗");
  JButton b2=new JButton("再按一下");
  b1.setBounds(200,100,180,60);
  b2.setBounds(200,200,180,60);
  JPanel p1=new JPanel();
  p1.setBounds(0,300,200,100);
  JTextArea t=new JTextArea(10,20);
  p1.add(t);
  //JScrollPane jsp=new JScrollPane(list);
  field.setLayout(new BorderLayout());
  field.add(combobox,BorderLayout.SOUTH);
  //把下拉列表加到文本框中
  field.setBounds(0,0,200,80);
  
  //combobox.setBounds(0,40,200,0);
  //combobox.setSize(100,0);
        //combobox.setPopupVisible(false);
  p.setLayout(null);
       // p1.add(list);
  //p1.add(field);
  p.add(field);
  p.add(b1);
  p.add(b2);
  p.add(p1);
  //p.add(combobox);
  /*combobox.addMouseListener(new MouseAdapter(){
   public void mousePressed(MouseEvent e){
    System.out.println("111111111");
    String s2=null;
                s2=combobox.getSelectedObjects().toString();
    System.out.println(s2);
    field.setText(s2);
   }
  });*/
  b1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
    combobox.setPopupVisible(true);
   }
  });
  b2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
    combobox.setPopupVisible(false);
    model.removeAllElements();
   }
  });
  field.getDocument().addDocumentListener(new DocumentListener(){
   //监听文本框的内容
   public void insertUpdate(DocumentEvent e){
    updata_combobox();
   }
   public void removeUpdate(DocumentEvent e){
    updata_combobox();
   }
   public void changedUpdate(DocumentEvent e){
    /*model.removeAllElements();
    updata_combobox();*/
   }
   private void updata_combobox(){
    String[] ss={"文本","文章","散文","文本域","领域","lingdi","1栋","11栋"};
    String s1=null;
    model.removeAllElements();
    s1=field.getText();
    System.out.println(s1);
    for(int i=0;i<8;i++){
     if(ss[i].toString().startsWith(s1))
      model.addElement(ss[i].toString());
    }
    combobox.setPopupVisible(true);
   }
  });
        p.addMouseListener(new MouseAdapter(){
   public void mouseEntered(MouseEvent e){
    System.out.println("666666666");
    try{
     String s3=null;
     s3=(String)combobox.getSelectedItem();
     field.setText(s3);
     combobox.setPopupVisible(false);
    }catch(Exception ce){ce.printStackTrace();}
   }
  });
  /*field.addMouseListener(new MouseAdapter(){//文本域鼠标监听
   public void mousePressed(MouseEvent e){
    System.out.println("111111");
    
    System.out.println("1111111");
    try{
         field.setText(combobox.getSelectedItem().toString());
    }catch(Exception ce){ce.printStackTrace();}
    
   }
  });*/
  field.addKeyListener(new KeyAdapter() {


 
      public void keyPressed(KeyEvent e) {
  
  /*if (e.getKeyCode() == KeyEvent.VK_SPACE) {
   if (combobox.isPopupVisible()) {
    e.setKeyCode(KeyEvent.VK_ENTER);
   }
  }*/
  if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) {
   e.setSource(combobox);
   combobox.dispatchEvent(e);
   if (e.getKeyCode() == KeyEvent.VK_ENTER) {
    field.setText(combobox.getSelectedItem().toString());
    combobox.setPopupVisible(false);
   }
  }
  /*if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
   combobox.setPopupVisible(false);
  }*/
  
 }
});

  /*field.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
    System.out.println("111111111");
    String s2=null;
                s2=combobox.getSelectedObjects().toString();
    System.out.println(s2);
    field.setText(s2);
   }
  });*/

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


    
}

 

你可能感兴趣的:(JTextField根据输入,实现自动获取内容)