# Suchfeld mit Auswahl



## Izibaar (1. Mai 2007)

Ich versuche momentan ein Suchfeld (JTextField) zu realisieren, welches mir während der Eingabe Vorschläge anzeigt mit den gleichen Anfangsbuchstaben. Dabei liegen die Daten in einer Tabelle vor. In der JTable ist die erste Spalte und zweite Spalte der Inhalt nach dem gesucht wird.
Um genau zu sein meine ich eine Suche wie auf www.quelle.de, dort werden Vorschläge gegeben. Und hier ein Auszug aus der (unfertigen) Tabelle:

```
3U TELECOM     .       516790	.	a
4SC AG         .       575381	.	b
AAP IMPLANT    .       506660	.	c
AAREAL BANK    .       540811	.	d
ABSOLUTE CAP	.       A0JEGU	.	e
AC SERVICE     .       511000	.	f
ACG            .       500770	.	.
AD PEPPER      .       940883	.	.
ADIDAS         ADS     500340	.	.
ADV VISION     .       931340	.	.
```
Punkte sind Platzhalter.
Die Vorschläge sollen aus der ersten und zweiten Spalte entnommen werden.

Habe schon an ein JPopupMenu gedacht. Bekomme es aber nicht angezeigt, wenn ich auf das Textfeld klicke. Und ob man dann dynamisch das Menü anpassen kann weiß ich auch nicht.


----------



## Tobias (1. Mai 2007)

Fang mal an zu lesen:
http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

mpG
Tobias


----------



## Izibaar (9. Mai 2007)

Danke. Das mit Popupmenu hat sich damit erübrigt.

Jetzt gibt es aber ein weiters Problem. Wie (oder welcher Listener?) registriert man das der Benutzer einen Buchstaben hinzugefügt hat. Der ActionListener springt nur an, wenn man mit 'Enter' seine Eingabe bestätigt. Und der KeyListener macht garnichts.


----------



## Wildcard (9. Mai 2007)

Einen DocumentListener


----------



## Izibaar (10. Mai 2007)

Ich glaube JComboBox ist doch das falsche. Ich komme überhaupt nicht an das ran was ich eingebe. Folglich kann ich auch keinen DocumentListener dranhängen. Ich habe auch schon versucht diesen zu implementieren und einen KeyListener zu implementieren. Desweiteren brachte ein JComboBox.KeySelectionManager auch keine Reaktion. Momentan wäre ich froh, wenn ein 't' ausgegeben wird falls sich etwas ändert im Eingabefeld.

Muss ich wohl doch über TextField was machen. Gibt es eine Möglichkeit den Quelltext von JComboBox einzusehen? Dann müsste ich das Rad nicht komplett neu erfinden.


----------



## Izibaar (11. Mai 2007)

Weil ich Threads nicht mag die zu keinen Lösungen kommen, schreibe ich nochmal. Ich habe schon 5-10 Foren gefunden in denen das gleiche gefragt wurde und nichts bei raus kam.  :wink: 

```
import javax.swing.JComboBox;
import javax.swing.JPopupMenu;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;


public class SearchField extends JComboBox implements DocumentListener {
	JPopupMenu menu;
	
	public SearchField() {
		this.setEditable(true);
				
		JTextComponent editor = (JTextComponent) this.getEditor().getEditorComponent();
		editor.getDocument().addDocumentListener(this);
	}
	

	public void changedUpdate(DocumentEvent arg0) {/*useless*/}

	public void insertUpdate(DocumentEvent arg0) {
		System.out.print("t2 ");
	}

	public void removeUpdate(DocumentEvent arg0) {
		System.out.print("t3 ");
	}
}
```
Mit den zwei Zeilen
JTextComponent editor = (JTextComponent) this.getEditor().getEditorComponent();
editor.getDocument().addDocumentListener(this);
wird wird der JComboBox über einen Umweg doch noch ein DocumentListener aufgedrückt. Der Rest dürfte dann mit einer Suche und setItem() removeItem() kein Problem mehr darstellen.

Am Ende hat dann ja jeder etwas dazu beigetragen. Danke.


----------

