2016-09-19 92 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