Autocompletion text

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 243 fois - Téléchargée 18 fois

Contenu du snippet

Ce Code montre l'utilisation de l'autocompletion dans un JTextField
après avoir choisie le mot il suffit de pressé la touche entrer du clavier pour la recupéré
sur la console de votre ide

Source / Exemple :


import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;
import javax.swing.text.PlainDocument;
 
public class testAutocomplete extends PlainDocument {
 	
	
	
	private static final long serialVersionUID = 1L;

	private final List<String> dictionary = new ArrayList<String>();
 
	private final JTextComponent _textField;
 
	
	public testAutocomplete(JTextComponent field, String[] aDictionary) {
		_textField = field;
		dictionary.addAll(Arrays.asList(aDictionary));
	}
 
	
	public void addDictionaryEntry(String item) {
		dictionary.add(item);
	}
 
	
	@Override
	public void insertString(int offs, String str, AttributeSet a)throws BadLocationException {
		super.insertString(offs, str, a);
		String word = autoComplete(getText(0, getLength()));
		if (word != null) {
			super.insertString(offs + str.length(), word, a);
			_textField.setCaretPosition(offs + str.length());
			_textField.moveCaretPosition(getLength());
			// _textField.setCaretPosition(getLength());
			// _textField.moveCaretPosition(offs + str.length());
		}
	}
 
	
	
	public String autoComplete(String text) {
		for (Iterator<String> i = dictionary.iterator(); i.hasNext();) {
			String word = i.next();
			if (word.startsWith(text)) {
				return word.substring(text.length());
			}
		}
		return null;
	}
 
/**

  • @param dictionary
  • @return
  • /
public static JTextField createAutoCompleteTextField(String[] dictionary) { JTextField field = new JTextField(20); testAutocomplete doc = new testAutocomplete(field, dictionary); field.setDocument(doc); return field; } public static void main(String args[]) { //Liste des String qui seront autocompleté /*********************************************************************/ String[] dict = { "java", "javase", "javaee", "javame", "j2se", "j2ee", "j2me" }; /********************************************************************/ //Le jtextField qui sera autocompeté final JTextField field = testAutocomplete .createAutoCompleteTextField(dict); //Action clavier touche entrer field.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if (key == KeyEvent.VK_ENTER) { Toolkit.getDefaultToolkit().beep(); System.out.println(field.getText()); } } }); //creation de fenetre principale JFrame frame = new JFrame("Autocomplete"); frame.setLayout(new FlowLayout()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new JLabel("Text Field: ")); frame.add(field); frame.pack(); frame.setVisible(true); } }

Conclusion :


Have fun!!

A voir également

Ajouter un commentaire Commentaires
cs_Julien39
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
366
6 sept. 2010 à 09:44
Tu pourrais également gérer la sauvegarde des mots autrement que dans une instance de tableau, dans une base de données au à défaut dans un fichier texte histoire que l'utilisateur puisse modifier les mots autocompletés.

Si tu utilises un fichier texte pour stocker tes données, je ne pense pas qu'un tableau soit le meilleur moyen de les utiliser. Une arrayList serait meilleure, tu peux la trier en surchargeant compareTo() et en utilisant un collections.sort, ce qui te permet d'accéder plus rapidement à tes mots. Le langage objet n'est pas tellement utilisé dans ce que tu fais.

De plus tes commentaires ne sont pas terrible, tu devrais en mettre un peu plus dans tes classes en utilisant la javadoc et un peu moins dans la main.

L'idée est tout de même assez originale
cs_Julien39
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
366
6 sept. 2010 à 09:37
Pour ne pas avoir à créer le dictionnaire toi même avec juste quelques mots. Tu peux au fur et à mesure de l'écriture récupérer l'ensemble des mots, en gors, tu n'as qu'à détecter quand l'utilisateur presse la touche espace et ajouter le mot que l'utilisateur a tapé.

Ainsi, ton programme, plus qu'un exemple aurait une utilité (outre l'exemple de code java)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.