JTextField Auswahlmenü

Status
Nicht offen für weitere Antworten.

freez

Top Contributor
Hallo,

jeder kennt doch die Auswahlmenüs, die bei Textfelder aufklappen, wenn man in dem Textfeld etwas eingibt, oder doppelt rein klickt. somit sieht man seine letzten Eingaben, die man dort jemals gemacht hat. Was z.B. bei der AutoVervollständigung in vielen Browsern zu sehen. So was suche ich für Swing. Wo finde ich sowas?

Danke
Gruss
Freez
 

m@nu

Bekanntes Mitglied
hm, google mal nach "autocomplete java jtextfield" ... der findet da diverse sachen...
hab sowas bis jetzt auch noch nicht realisiert...
 

freez

Top Contributor
habe was gesucht, aber wenig gefunden.

könnte man das nicht mit einem DropDownMenü, welches sich aufklappt bei der Eingabe realisieren?
 

freez

Top Contributor
ja, das ist schon mal echt interessant. Ich muss mich zwar noch etwas durchwurschteln, aber das sieht gut aus.
 

freez

Top Contributor
ein kleiner hacken ist noch dabei ... wäre ja langweilig, wenn ich nix zu tun hätte: die Einträge sind immer die selben. Da es eigentlich als Textfeld gedacht ist, sollten nur noch die passenden einträge in der ComboBox sein. Und wenn keine mehr passen, das DropDownFeld verschwinden. Eigentlich genauso, wie das Adressfeld im Browser. Genauso muss es sein. Also, es ist nicht so ganz das passende ... aber eine Welt ohne Arbeit, was wäre das denn :)
 

Sky

Top Contributor
Dafür könntest Dir ein eigenes Model schreiben, welches Du der Combobox zuweisen kannst.
 

freez

Top Contributor
Danke erst mal für eure Hilfe.

ich bin grad an folgender Lösung:
- JComboBox editierbar
- der JComboBox eine Liste MÖGLICHER Einträge mitgeben
- Tastendruck abfangen
- inhalt prüfen, und nur die Einträge im PullDown anzeigen, welche mit dem Anfang, des bereits eingegebenen Strings übereinstimmen
- wenn es keine Einträge gibt, die Übereinstimmen, PullDown schliessen

Wie hört sich das an?

Ich bin gerade dabei den Tastendruck abzufangen. Aber der KeyListener greift nicht. Funktioniert der KeyListener bei der ComboBox nicht? Wäre aber blöd, wenn man ihn setzen kann, aber nicht nutzen. Dann fehlt mir noch der Text, der eingegeben wurde. JComboBox#getText() gibt es leider net.

Gruss
freez

PS: Meine Lösung werde ich natürlich zur Verfügung stellen
 

freez

Top Contributor
Kann mir jemand sagen, warum keine Methode vom KeyListener angesprochen wird? Ich schreibe etwas in die ComboBox rein, aber nix tut sich. Ich habe nachgeschaut, in dem Beispiel von lins Link wird der KeyListener auch bemüht, um den Tastendruck abzufangen. Was läuft verkehrt?

Code:
public class AutoComboBox extends JComboBox implements KeyListener
{

	private String[]	ItemList;
	PlainDocument document;

	private void initiate()
	{
		this.setEditable(true);
		document = (PlainDocument)((JTextComponent) this.getEditor().getEditorComponent()).getDocument();
		this.addKeyListener(this);
	}
	public AutoComboBox()
	{
		super();
		initiate();
	}

	public static void main(String[] args)
	{
		JFrame frame = new JFrame("ComboBoxTest");
		String [] list = {"hallo", "test", "was", "los", "denis", "berna", "kaan", "cenk", "toll"};
		AutoComboBox acb = new AutoComboBox();
		acb.setItemList(list);
		frame.getContentPane().add(acb);
		frame.pack();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	private void setItemList(String[] list)
	{
		this.ItemList = list;
	}

	public void keyTyped(KeyEvent arg0)
	{
		System.out.println("typed " + arg0.getKeyChar());
	}

	public void keyPressed(KeyEvent arg0)
	{
		System.out.println(arg0.getKeyCode() + "Pressed");
	}

	public void keyReleased(KeyEvent arg0)
	{
		System.out.println(arg0.getKeyCode() + "Released");
	}
}
 

freez

Top Contributor
OK, Problem erkannt: nicht der ComboBox den Listener hinzufügen, sondern seiner EditorComponent ... naja. Ich habe jetzt eine vorläufige Lösung. Nur habe ich noch ein kleines Problem. Sobald ich eine Taste (hier: 't') drücke, erscheint mir schon das PullDownMenü, aber meine ComboBox ergraut. Wieso?

Code:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.text.JTextComponent;
import javax.swing.text.PlainDocument;
/*
 * Erstellt am 07.09.2005 16:32:53 
 *
 */

/**
 * @author oxis
 *
 */
public class AutoComboBox extends JComboBox implements KeyListener
{

	private String[]	ItemList;
	PlainDocument document;
	JTextComponent editor;
	String aktInhalt ="";

	/**
	 * @param arg0
	 */
	public AutoComboBox(ComboBoxModel arg0)
	{
		super(arg0);
		initiate();
	}

	/**
	 * 
	 */
	private void initiate()
	{
		this.setEditable(true);
		document = (PlainDocument)((JTextComponent) this.getEditor().getEditorComponent()).getDocument();
		editor = (JTextComponent)this.getEditor().getEditorComponent();
		editor.addKeyListener(this);
	}

	/**
	 * @param arg0
	 */
	public AutoComboBox(Object[] arg0)
	{
		super(arg0);
		initiate();
	}

	/**
	 * @param arg0
	 */
	public AutoComboBox(Vector arg0)
	{
		super(arg0);
		initiate();
	}

	/**
	 * 
	 */
	public AutoComboBox()
	{
		super();
		initiate();
	}

	public static void main(String[] args)
	{
		JFrame frame = new JFrame("ComboBoxTest");
		String [] list = {"hallo", "test", "was", "los", "denis", "berna", "kaan", "cenk", "toll"};
		AutoComboBox acb = new AutoComboBox();
		acb.setItemList(list);
		frame.getContentPane().add(acb);
		frame.pack();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	/**
	 * @param list
	 */
	private void setItemList(String[] list)
	{
		this.ItemList = list;
	}

	/* (non-Javadoc)
	 * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent)
	 */
	public void keyTyped(KeyEvent arg0)
	{
	}

	/* (non-Javadoc)
	 * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)
	 */
	public void keyPressed(KeyEvent arg0)
	{
	}

	/* (non-Javadoc)
	 * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
	 */
	public void keyReleased(KeyEvent arg0)
	{
		this.removeAll();
		aktInhalt = editor.getText();
		System.out.println(aktInhalt);
		for(int i = 0; i < ItemList.length; i++)
		{
			if(ItemList[i].startsWith(aktInhalt))
				this.addItem(ItemList[i]);
		}				
		
		if(this.getItemCount() == 0)
			this.hidePopup();
		else
			this.showPopup();
	}
}
 

freez

Top Contributor
Hallo,

ich hatte doch versprochen, eine Lösung zu präsentieren, wenn ich etwas habe. Ich bin nun folgenden Lösungsweg gegangen: Ein JTextfield mit einen JPopupMenu, welches an dem Textfield unten "dranhängt".

100%ig ist es aber noch nicht. zum Beispiel, wenn ich die Taste "Pfeil nach unten" betätige, soll der Focus im PopUp liegen. Das macht er auch. Nur springt er zum 2. Element, und dann wieder zurück ins erste. Sieht unschön aus. Aber funktioniert trotzdem. Komischerweise funktioniert es, wenn ich eine andere Methode vom KeyListener nehme. Hat aber noch andere Nachteile, wie z.B. daß das aktuelle Zeichen noch nicht im Textfeld steht, und damit funktioniert die auswertung nicht richtig.
Vielleicht sieht ja jemand auf den ersten Blick, was ich verkehrt mache. Ich habe zur Auswertung noch ein paar Printline Zeilen drin. die können natürlich gelöscht werden.

Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.text.Document;
/*
 * Erstellt am 08.09.2005 15:30:53 
 */

/**
 * @author oxis
 *
 */
public class AutoComboBox2 extends JTextField implements KeyListener, ActionListener
{

	private String[]	ItemList;
	private JPopupMenu pum = new JPopupMenu();
	private String	aktInhalt;
	private boolean popupIsShowing = false;

	public AutoComboBox2()
	{
		super();
		initiate();
	}

	public AutoComboBox2(String arg0)
	{
		super(arg0);
		initiate();
	}

	public AutoComboBox2(int arg0)
	{
		super(arg0);
		initiate();
	}

	public AutoComboBox2(String arg0, int arg1)
	{
		super(arg0, arg1);
		initiate();
	}

	public AutoComboBox2(Document arg0, String arg1, int arg2)
	{
		super(arg0, arg1, arg2);
		initiate();
	}

	private void initiate()
	{
		this.setComponentPopupMenu(pum);
		this.addKeyListener(this);
		pum.setBackground(this.getBackground());
	}

	public static void main(String[] args)
	{
		JFrame frame = new JFrame("ComboBoxTest");
		String [] list = {"hallo", "test", "was", "los", "denis", "berna", "kaan", "cenk", "toll", "he", "ho", "hi"};
		AutoComboBox2 acb = new AutoComboBox2();
		acb.setItemList(list);
		frame.getContentPane().add(acb);
		frame.pack();
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	private void setItemList(String[] list)
	{
		this.ItemList = list;		
	}

	public void keyTyped(KeyEvent arg0)
	{

	}

	public void keyPressed(KeyEvent arg0)
	{	

	}

	public void keyReleased(KeyEvent arg0)
	{
		System.out.println("key");
		fillPopUp();
		pum.setVisible(false);
		if(pum.getComponentCount() != 0)
		{
			pum.show(this, 0, this.getHeight());
			pum.setVisible(true);
			if(arg0.getKeyCode() != KeyEvent.VK_DOWN)				
				this.requestFocus();
		}
		if(arg0.getKeyCode() == KeyEvent.VK_ENTER)
			pum.setVisible(false);
	}

	private void fillPopUp()
	{
		pum.removeAll();
		pum.setVisible(false);
		aktInhalt = this.getText();
		System.out.println(aktInhalt);
		
		for(int i = 0; i < ItemList.length; i++)
		{
			if(ItemList[i].startsWith(aktInhalt))
			{
				JMenuItem mi = new JMenuItem(ItemList[i]);
				mi.addActionListener(this);
				pum.add(mi);
			}
		}				
	}

	public void actionPerformed(ActionEvent arg0)
	{
		this.setText(arg0.getActionCommand());
		pum.setVisible(false);
	}
}
 

freez

Top Contributor
Axo, was mich noch etwas wundert: ich kann die Größe vom Popup nicht verändern. Es wäre schön, wenn ich eine Größe festlegen könnte, damit es immer einheitlich breit aussieht.
 

Jörg

Bekanntes Mitglied
hm die Groesse kannst du ja ganz einfach setzen mit setSize(Dimension) oder (besser) setPreferredSize(Dimension).
Leider weiss ich nicht wie sich das verhaelt, da du ja dynamischen Inhalt hast, sprich du brauchst dynamische Groesse -> neu berechnen???
 

freez

Top Contributor
setSize habe ich versucht. aber er zeigt es mir nicht so an, wie ich es will.
Vielleicht sollte ich mit jedem "Füllen" des Menüs die Größe nochmal neu festlegen. Vielleicht wird es automatisch überschrieben, beim Hinzufügen von Inhalt.


Ok, mal ne andere Frage. Das mit dem PopupMenue ist net soooo schön. kann man vielleicht eine JList an ein Textfield ran hängen? Ich kann ja die JList nicht so einfach per add() hinzufügen, das sie ja den Layout entsprechend positioniert wird. Kann ich sie frei schwebend über dem Frame positionieren?

Und wenn ich grad bei so vielen Fragen bin. Hat jemand eine deutsche Buchempfehlung, für das GUI von Java? Speziell für solche Fälle, wie mein Problem jetzt. Und wie man z.B. komplett neue Elemente erstellen kann. Was einfach tiefer geht, als das benutzen, der vorhandenen Elemente.
 

Jörg

Bekanntes Mitglied
what's up comrade? Kein Lust mehr??

Hab das ganze mal von der anderen Seite aus probiert (JComboBox)
allerdings weiss ich nicht wie sich das mit dem LaF vertraegt,
musste einige Methoden bzgl UI ueberschreiben, damit ich den
Button wegkrieg ...
Leider hab ich jetzt noch das Problem, dass sich das Textfeld von
verschiedenen Handlern aus aendert, da war deine Loesung
einfacher ....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
G JTextField Änderungen überprüfen AWT, Swing, JavaFX & SWT 4
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
R Swing JTextField nicht-kopierbarer Text AWT, Swing, JavaFX & SWT 1
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
xYurisha Gui Focus von JTextField weglenken AWT, Swing, JavaFX & SWT 6
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
G JTextField Eingabe in DB speichern AWT, Swing, JavaFX & SWT 68
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
R jTextField Eingabe überprüfen AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
D Inhalt von JTextField in MySQL speichern. Wie ? AWT, Swing, JavaFX & SWT 1
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
J 100% CPU Last mit JTextField AWT, Swing, JavaFX & SWT 2
U Swing JTextField aus dem Editmodus nehmen AWT, Swing, JavaFX & SWT 1
Q-bert JTextField per Mausklick einfügen AWT, Swing, JavaFX & SWT 3
L JTextField erscheint erst nach Veränderung der Framegröße AWT, Swing, JavaFX & SWT 5
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
L Swing JTextField nicht sichtbar AWT, Swing, JavaFX & SWT 1
Soloeco Swing JTextField auslesen Klassen übergreifend AWT, Swing, JavaFX & SWT 16
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
N Swing Jtextfield und Ausgabe von Wärungsbeträgen AWT, Swing, JavaFX & SWT 3
beatles Swing JTextField - Game Status aus Array anzeigen AWT, Swing, JavaFX & SWT 3
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
Tausendsassa Text changed event handler jTextField AWT, Swing, JavaFX & SWT 3
B jTextfield Übergabe des Strings AWT, Swing, JavaFX & SWT 16
P JTextField unsichtbar machen AWT, Swing, JavaFX & SWT 2
G .txt-Datei einlesen /formatieren in JTextfield ?? AWT, Swing, JavaFX & SWT 8
C Swing JTextField Funktion zuweisen - Löschen von Buchstaben/Sonderzeichen AWT, Swing, JavaFX & SWT 6
S JTextField parameter unveränderlich AWT, Swing, JavaFX & SWT 9
T bekomme keinen Focus auf JTextField AWT, Swing, JavaFX & SWT 3
N Cursor im JTextField AWT, Swing, JavaFX & SWT 6
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
A JTextField und JButtons AWT, Swing, JavaFX & SWT 2
T jTextField mit String befüllen AWT, Swing, JavaFX & SWT 1
O JTextfield wird über'drawed'.. AWT, Swing, JavaFX & SWT 6
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
S Bekomme bein Buttonklick das Jtextfield nicht ausgegeben AWT, Swing, JavaFX & SWT 8
Seikuassi Swing JTextField nimmt kein Einfügen (Strg+V) an AWT, Swing, JavaFX & SWT 4
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
B Swing JTextField mit Bildschirmauflösung skalieren lassen. AWT, Swing, JavaFX & SWT 4
C Geloest: JTextfield: Titel automatisch entfernen, sobald Text eingegeben wird AWT, Swing, JavaFX & SWT 1
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
T AWT JTextfield verschwindet AWT, Swing, JavaFX & SWT 10
dat_vin KeyEvent jTextField AWT, Swing, JavaFX & SWT 12
C JTextfield ohne Enter feuern AWT, Swing, JavaFX & SWT 8
W Swing JTextField nur für Integer AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
F Swing JTextField (unbeschriebbar machen) AWT, Swing, JavaFX & SWT 12
W JTextfield - Wert lässt sich nicht setzen AWT, Swing, JavaFX & SWT 3
TheJavaKid JTextField: Reine Domain herausfiltern, sonst Inhalt löschen AWT, Swing, JavaFX & SWT 1
R Swing User tippt in unsichtbares JTextField AWT, Swing, JavaFX & SWT 3
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
U Swing JTextField zur Laufzeit auf Eingaben prüfen AWT, Swing, JavaFX & SWT 0
X Swing JTextField AWT, Swing, JavaFX & SWT 4
M Swing JTextField nicht ausfüllbar AWT, Swing, JavaFX & SWT 8
C Problem mit JTextField AWT, Swing, JavaFX & SWT 4
S Swing WYSIWYG JTextField AWT, Swing, JavaFX & SWT 2
vodkaz JTextField && Strings AWT, Swing, JavaFX & SWT 2
R Swing JScrollBar mit JTextField koppeln AWT, Swing, JavaFX & SWT 3
A Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe AWT, Swing, JavaFX & SWT 5
X JTextField Ausgabe klappt nicht AWT, Swing, JavaFX & SWT 4
S Swing Verzeichnis/Datei-Pfad in JTextField schreiben AWT, Swing, JavaFX & SWT 2
R Swing JTextField getText() liefert leeren String AWT, Swing, JavaFX & SWT 6
J Mausfarbe ändern JTextField AWT, Swing, JavaFX & SWT 6
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
A editable JTextField & setText AWT, Swing, JavaFX & SWT 2
O Swing JTextField Sync View -> Model AWT, Swing, JavaFX & SWT 3
M JTextField gibt beim auslesen null aus AWT, Swing, JavaFX & SWT 9
K JTextField mit Standardtext AWT, Swing, JavaFX & SWT 3
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
TheJavaKid DocumentListener soll Text in JTextField ändern AWT, Swing, JavaFX & SWT 4
I Swing JTextField ausblenden -? AWT, Swing, JavaFX & SWT 6
0 Swing JTextField - Position ? AWT, Swing, JavaFX & SWT 2
L Button über/auf JTextField AWT, Swing, JavaFX & SWT 5
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
M Swing jTextfield und PlainDocument AWT, Swing, JavaFX & SWT 18
D JTextField über ein Game AWT, Swing, JavaFX & SWT 11
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
Kaniee Swing Woher bekommt JTextField die Eingaben? AWT, Swing, JavaFX & SWT 2
M JTextField gesperrt nach erster Benutzung... AWT, Swing, JavaFX & SWT 4
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
R JTextField mit abgerundeten Ecken - Geht über Grenze hinaus AWT, Swing, JavaFX & SWT 4
R JTextField Eingabefeld innerhalb verschieben AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben