2016-09-19 94 views
0

好吧,我一直在寻找如何做天自动预测文本字段现在,是的,我找到了一些解决方案,但它们是完全难以理解的是诚实的,完全混乱,因为我是新来的的Java/GUI。如果我不得不点击一个按钮来做到这一点会容易得多,但我无法知道程序何时会在“一封信被写入”时执行此类操作。我做了一个简单的文本框和一个按钮,只要点击该按钮,在文本字段字符串中一个ArrayList被添加,然后打印在另一个文本框整个数组列表(只是一个简单的例子来测试自动预测)自动预测文本字段

public class Phonebook { 
    public static ArrayList<String> names = new ArrayList<String>(); 

    public static void main(String[] args) { 
     JFrame myForm = new JFrame("Phonebook"); 
     myForm.setSize(555, 500); 
     myForm.setLocation(0, 0); 

     JButton button = new JButton("Add"); 
     button.setSize(100, 50); 
     button.setLocation(450, 40); 
     myForm.add(button); 

     JTextField t = new JTextField(); 
     t.setSize(200, 60); 
     t.setLocation(10, 40); 
     myForm.add(t); 

     JTextField ttt = new JTextField(); 
     ttt.setSize(500, 300); 
     ttt.setLocation(10, 100); 
     ttt.setEditable(false); 
     myForm.add(ttt); 

     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       names.add(t.getText()); 
       String str = ""; 
       for(int i=0; i<names.size(); i++) 
        str + =names.get(i) + "\n"; 
       ttt.setText(str); 
      } 
     }); 
     myForm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     myForm.setLayout(null); 
     myForm.setVisible(true); 
    } 
} 

所以我想让大文本框自动完成小文本框,所以如果我输入“M”,它只显示以“M”开头的数组列表中的名称,该代码用于查找以一个“M”会很容易,但是让它变成“自动”对我来说听起来很难。如果有人可以帮我用我的代码,而不是给我一个新的整个混淆代码,我会非常感激。谢谢。

编辑:或者,我只是想,不知怎的,检查是否一个字母写的,所以(如果信被写在文本字段)的代码,是System.out.print(“A”);

+0

http://stackoverflow.com/questions/14186955/create-a-autocompleting-textbox-in-java-with-a-dropdown-list这是你想要的吗? –

+0

btw这些被称为**自动完成文本框**。在谷歌上搜索你将会有1000个解决方案。 –

+0

@MehrajMalik我已经阅读了好几个小时了,每次点击链接都会给我另外10个链接,我通过了数千个链接。他们都在做自动预测或组合框内自动完成的,但我想它一个文本框,这是不同的内部我想 – Ahmed

回答

1

你可以尝试连接一个Document Listener到文本框:

textField.getDocument().addDocumentListener(new DocumentListener() { 
    public void insertUpdate(DocumentEvent e) { 
     // search the prediction data for the current contents 
     // of the text field 
    } 
    public void removeUpdate(DocumentEvent e) { 
     // do stuff 
    } 
    public void changedUpdate(DocumentEvent e) { 
     //Plain text components do not fire these events 
    } 
}); 

然后,您可以使用的中的insertUpdate或中的removeUpdate功能时,文本更改为得到一个勾入点,访问文本框的值,并把您的自动完成功能。

+0

它工作。然而,我无法理解当其他两个函数正在做什么需要做什么时,UpdateUpdate做了什么。谢谢大家的回答。 – Ahmed

+0

不客气。我链接的文档解释说,changedUpdate用于StyledDocument对象,因此它检测样式中的更改,而不是文本内容中的更改 – dahui