Pesquisa instantania no JTextField

Bem Pessoal to construindo um sistema em java. Eu gostaria de saber como faco para fazer uma pesquisa num test field. Ele deve funcionar do seguinte jeito.
Logo que o usuario comeca a digitar ele ja ta procurando sem ter de ter um botao pesquisar propriamente dito.

Use o evento key pressed no text field.

[quote=psp-player]Bem Pessoal to construindo um sistema em java. Eu gostaria de saber como faco para fazer uma pesquisa num test field. Ele deve funcionar do seguinte jeito.
Logo que o usuario comeca a digitar ele ja ta procurando sem ter de ter um botao pesquisar propriamente dito. [/quote]

Isso não é trivial de fazer. Procure pelo AutoCompleteDecorator do pacote Swingx.

Geralmente não fazemos esse tipo de tratamento pelo evento, como o chimufox indicou também.
O ideal é tratar pelo Document, como o Decorator que indiquei faz.

Para o Autocomplete com o JComboBox utilizo essa classe:

[code]import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.Collator;
import java.util.Locale;

import javax.swing.;
import javax.swing.text.
;

public class AutoComplete extends PlainDocument {
private static final long serialVersionUID = 5157735565710292356L;
JComboBox comboBox;
ComboBoxModel model;
JTextComponent editor;
// flag to indicate if setSelectedItem has been called
// subsequent calls to remove/insertString should be ignored
boolean selecting=false;
boolean hidePopupOnFocusLoss;
boolean hitBackspace=false;
boolean hitBackspaceOnSelection;

KeyListener editorKeyListener;  
FocusListener editorFocusListener;  

public AutoComplete(final JComboBox comboBox) {
	this.comboBox = comboBox;  
	model = comboBox.getModel();  
	comboBox.addActionListener(new ActionListener() {  
		@Override  
		public void actionPerformed(ActionEvent e) {  
			if (!selecting) highlightCompletedText(0);  
		}  
	});  
	comboBox.addPropertyChangeListener(new PropertyChangeListener() {  
		@Override  
		public void propertyChange(PropertyChangeEvent e) {  
			if (e.getPropertyName().equals("editor")) configureEditor((ComboBoxEditor) e.getNewValue());  
			if (e.getPropertyName().equals("model")) model = (ComboBoxModel) e.getNewValue();  
		}  
	});  
	editorKeyListener = new KeyAdapter() {  
		@Override  
		public void keyPressed(KeyEvent e) {  
			if (comboBox.isDisplayable()) comboBox.setPopupVisible(true);  
			hitBackspace=false;  

// switch (e.getKeyCode()) {
// // determine if the pressed key is backspace (needed by the remove method)
// case KeyEvent.VK_BACK_SPACE : hitBackspace=true;
// hitBackspaceOnSelection=editor.getSelectionStart()!=editor.getSelectionEnd();
// break;
// // ignore delete key
//// case KeyEvent.VK_DELETE : e.consume();
//// comboBox.getToolkit().beep();
//// break;
// }
}
};
// Bug 5100422 on Java 1.5: Editable JComboBox won’t hide popup when tabbing out
hidePopupOnFocusLoss=System.getProperty(“java.version”).startsWith(“1.5”);
// Highlight whole text when gaining focus
editorFocusListener = new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
highlightCompletedText(0);
}
@Override
public void focusLost(FocusEvent e) {
// Workaround for Bug 5100422 - Hide Popup on focus loss
if (hidePopupOnFocusLoss) comboBox.setPopupVisible(false);
}
};
configureEditor(comboBox.getEditor());
// Handle initially selected object
Object selected = comboBox.getSelectedItem();
if (selected!=null) setText(selected.toString());
highlightCompletedText(0);
}

public static void enable(JComboBox comboBox) {  
	// has to be editable  
	comboBox.setEditable(true);  
	// change the editor's document  
	new AutoComplete(comboBox);
}  

void configureEditor(ComboBoxEditor newEditor) {  
	if (editor != null) {  
		editor.removeKeyListener(editorKeyListener);  
		editor.removeFocusListener(editorFocusListener);  
	}  

	if (newEditor != null) {  
		editor = (JTextComponent) newEditor.getEditorComponent();  
		editor.addKeyListener(editorKeyListener);  
		editor.addFocusListener(editorFocusListener);  
		editor.setDocument(this);  
	}  
}  

@Override  
public void remove(int offs, int len) throws BadLocationException {  
	// return immediately when selecting an item  
	if (selecting) return;  
	if (hitBackspace) {  
		// user hit backspace => move the selection backwards  
		// old item keeps being selected  
		if (offs>0) {  
			if (hitBackspaceOnSelection) offs--;  
		} else {  
			// User hit backspace with the cursor positioned on the start => beep  
			comboBox.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);  
		}  
		highlightCompletedText(offs);  
	} else {  
		super.remove(offs, len);  
	}  
}  

@Override  
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {  
	// return immediately when selecting an item  
	if (selecting) return;  
	// insert the string into the document  
	super.insertString(offs, str, a);  
	// lookup and select a matching item  
	Object item = lookupItem(getText(0, getLength()));  
	if (item != null) {  
		setSelectedItem(item);  
	} else {  
		// keep old item selected if there is no match  
		item = comboBox.getSelectedItem();  
		// imitate no insert (later on offs will be incremented by str.length(): selection won't move forward)  
		offs = offs-str.length();  
		// provide feedback to the user that his input has been received but can not be accepted  
		comboBox.getToolkit().beep(); // when available use: UIManager.getLookAndFeel().provideErrorFeedback(comboBox);  
	}  
	if(item != null)  
		setText(item.toString());  
	else   
		setText("");  
	// select the completed part  
	highlightCompletedText(offs+str.length());  
		  
}  

private void setText(String text) {  
	try {  
		// remove all text and insert the completed string  
		super.remove(0, getLength());  
		super.insertString(0, text, null);  
	} catch (BadLocationException e) {  
		throw new RuntimeException(e.toString());  
	}  
}  

private void highlightCompletedText(int start) {  
	editor.setCaretPosition(getLength());  
	editor.moveCaretPosition(start);  
}  

private void setSelectedItem(Object item) {  
	selecting = true;  
	model.setSelectedItem(item);  
	selecting = false;  
}  

private Object lookupItem(String pattern) {  
	Object selectedItem = model.getSelectedItem();  
	// only search for a different item if the currently selected does not match  
	if (selectedItem != null && startsWithIgnoreAccentsAndCase(selectedItem.toString(), pattern)) {  
		return selectedItem;
	} else {  
		// iterate over all items  
		for (int i=0, n=model.getSize(); i < n; i++) {  
			Object currentItem = model.getElementAt(i);  
			// current item starts with the pattern?  
			if (currentItem != null && startsWithIgnoreAccentsAndCase(currentItem.toString(), pattern)) {  
				return currentItem;  
			}  
		}  
	}  
	// no item starts with the pattern => return null  
	return null;  
}  
private static Collator collator = null;  
private static Collator getCollator() {  
	if (collator == null) {  
		collator = Collator.getInstance (new Locale ("pt", "BR"));  
		collator.setStrength(Collator.PRIMARY);  
	}  
	return collator;  
}  
public static boolean startsWithIgnoreAccentsAndCase(String source,String target) {  
	if (target.length() > source.length())  
		return false;  
	return getCollator().compare(source.substring(0, target.length()),target) == 0;  
}  

} [/code]

Como usar? Fácil!

Talvez sirva com o JTextField :slight_smile:

ups nao existe um link especifico que da para eu estudar esse problema.