自动预测TextField

时间:2016-09-19 10:09:44

标签: java

好的,我现在一直在寻找如何做一个自动预测文本字段,是的,我找到了一些解决方案但是说实话它们很难理解,而且因为我是Java / GUI的新手而完全混淆。如果我不得不点击一个按钮来完成它会更容易,但是我不知道程序在“写一封信”时会如何执行这样的动作。我创建了一个简单的文本字段和一个按钮,每当单击该按钮时,文本字段中的字符串将被添加到一个arraylist中,然后在另一个文本字段中打印整个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”,它只显示arraylist中以“M”开头的名称,用于查找以“M”开头的名称的代码“M”很容易,但让它“自动”对我来说听起来很难。如果有人可以帮助我使用我的代码而不是向我发送一个新的令人困惑的代码,我会非常感激。谢谢。

编辑:或者我只是想要以某种方式检查是否写了一个字母的代码,所以(如果一个字母写在文本字段中),system.out.print(“A”);

1 个答案:

答案 0 :(得分: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函数在文本更改时获取钩子,访问textFields值并将自动完成功能放在那里。