2016-09-19 3 views
0

Okay, ich habe seit Tagen gesucht, wie man ein Auto-Vorhersage-Textfeld jetzt macht, und ja, ich habe einige Lösungen gefunden, aber sie sind völlig schwer zu verstehen, ehrlich gesagt, und total verwirrend, da ich neu bin Java/GUI. Es wäre viel einfacher gewesen, wenn ich auf einen Knopf klicken müsste, um es zu tun, aber ich kann nicht verstehen, wie das Programm solche Aktionen ausführt, wenn "ein Buchstabe geschrieben wird". Ich habe ein einfaches Textfeld und eine Schaltfläche gemacht, wenn die Schaltfläche geklickt wird, die Zeichenfolge im Textfeld wird in einer Arraylist hinzugefügt, dann druckt die gesamte Arraylist in einem anderen Textfeld (nur ein einfaches Beispiel, um die automatische Vorhersage zu testen)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); 
    } 
} 

Also ich möchte das große Textfeld das kleine Textfeld automatisch vervollständigen, wenn ich also "M" eintippe, zeigt es nur die Namen in der Arraylist, die mit einem "M" beginnen, dem Code zum Auffinden der Namen, die mit beginnen ein "M" wäre einfach, aber es "automatisch" zu machen klingt sehr schwierig für mich. Wenn mir jemand mit meinem Code helfen könnte, anstatt mir einen neuen verwirrenden Code zu schicken, würde ich das wirklich schätzen. Vielen Dank.

Edit: Oder ich will nur den Code, der irgendwie prüft, ob ein Brief geschrieben wird, also (wenn ein Buchstabe in das Textfeld geschrieben wird), system.out.print ("A");

+0

http://stackoverflow.com/questions/14186955/create-a-autocompleting-textbox-in-java-with-a-dropdown-list Ist das, was Sie wollen? –

+0

BTW diese heißen ** Auto-Volltext-Box **. Suchen Sie auf Google Sie 1000 Lösungen. –

+0

@MehrajMalik Ich lese seit Stunden durch, und jeder Link, den ich anklicke, gibt mir weitere 10 Links, ich habe tausend Links durchgelesen. Sie tun alle die automatische Vorhersage oder die automatische Vervollständigung in einer Combobox, aber ich will es in einem Textfeld, das ist anders Ich nehme an – Ahmed

Antwort

1

könnten Sie versuchen, eine Befestigung Document Listener das Textfeld:

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 
    } 
}); 

Sie können dann entweder die insertUpdate oder removeUpdate Funktionen einen Haken in den Punkt zu bringen, wenn der Text geändert wird, Zugriff auf die Textfelder Werte und setzen Ihre Auto-Vervollständigen-Funktion in dort.

+0

Es hat funktioniert. Ich kann jedoch nicht verstehen, was ChangeUpdate tut, wenn die anderen beiden Funktionen tun, was getan werden muss. Vielen Dank für die Antwort tho. – Ahmed

+0

Gern geschehen. In der Dokumentation, die ich verlinkt habe, wird "ChangedUpdate" für ein StyledDocument-Objekt verwendet, sodass Änderungen im Stil und keine Änderungen im Textinhalt erkannt werden – dahui