2016-09-19 8 views
0

さて、私は数日前に自動予測テキストフィールドを実行する方法を探していました。はい、いくつかの解決策を見つけましたが、正直であることを完全に理解するのは難しく、 Java/GUI。ボタンをクリックしなければならない場合はずっと簡単でしたが、「手紙が書かれる」たびにプログラムがそのような行動をどのように実行するかはわかりません。単純なテキストフィールドとボタンを作成しました。ボタンがクリックされるたびに、テキストフィールドの文字列がarraylistに追加され、別のテキストフィールドにarraylistが印刷されます(自動予測をテストする簡単な例)Auto Prediction TextField

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"で始まるarraylistの名前だけが表示されます。 「M」は簡単ですが、「自動」にするのはとても難しいです。誰かが私に新しいコード全体を混乱させる代わりに私のコードを助けてくれたら、本当に感謝しています。ありがとうございました。

編集:または、何らかの形で文字が書かれているかどうかを確認するコードが必要なので、(文字がテキストフィールドに書き込まれると)、system.out.print( "A");

+0

http://stackoverflow.com/questions/14186955/create-a-autocompleting-textbox-in-java-with-a-dropdown-listそれはあなたが望むものですか? –

+0

btwこれらは**自動完成テキストボックス**と呼ばれます。 Googleで検索すると、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

働いた。しかし、他の2つの機能が何をしているのか分かっていれば、私はchangeUpdateが何をしているのか理解できません。答えはたくさんあります。 – Ahmed

+0

ようこそ。私がリンクしているドキュメントでは、changedUpdateはStyledDocumentオブジェクトのため、スタイルの変更を検出し、テキストコンテンツの変更は検出しません – dahui