Eingabemöglichkeiten für Textfeld begrenzen

epitox

Mitglied
Guten Morgen,

besteht die Möglichkeit, die Eingabemöglichkeiten für ein Textfeld zu begrenzen?
So, dass der Benutzer z.B. nur Begriffe eingeben kann, die in einer Tabelle hinterlegt sind und andere Eingaben nicht aktzepiert werden?

Danke für eure Hilfe!
 
Darf denn immer nur einer der Begriffe im Textfeld stehen? Dann würde ich es durch eine andere Komponente z.B. JComboBox ersetzen.
Wenn das Textfeld mehrere dieser Begriffe enthalten darf, könnte man mit einen InputVerifier arbeiten, der beim Verlassen des Textfelds die Gültigkeit des Inhaltes prüft.
Um das während der Eingabe zu machen könnte man mit einem KeyListener am Textfeld oder DocumentListener an dessen Document arbeiten.
 
Darf denn immer nur einer der Begriffe im Textfeld stehen? Dann würde ich es durch eine andere Komponente z.B. JComboBox ersetzen.
Wenn das Textfeld mehrere dieser Begriffe enthalten darf, könnte man mit einen InputVerifier arbeiten, der beim Verlassen des Textfelds die Gültigkeit des Inhaltes prüft.
Um das während der Eingabe zu machen könnte man mit einem KeyListener am Textfeld oder DocumentListener an dessen Document arbeiten.

Soll im Endeffekt darauf hinauslaufen, dass der Benutzer während der Eingabe Vorschläge angezeigt, bekommt, die in einer Tabelle oder in einem Feld etc. hinterlegt sind.

Er muss dann zwingend einen Vorschlag auswählen.

Beispiel:

Der Benutzer tippt ein "Kopierpapier", dann wird ihm vorgeschlagen "Kopierpapier DIN A4", "Kopierpapier DIN A5" und er muss sich für eines entscheiden.

"Kopierpapier DIN A6" sollte eine ungültige Eingabe darstellen.
 
Der Benutzer tippt ein "Kopierpapier", dann wird ihm vorgeschlagen "Kopierpapier DIN A4", "Kopierpapier DIN A5" und er muss sich für eines entscheiden.
Wenn mehrere Werte vorgeschlagen werden sollen, benötigst Du ja ein DropDown, was dann eher für eine ComboBox sprechen würde.
Wenn man nach "jtextfield autocomplete" oder "jcombobox autocomplete" sucht, sollte man da einige Möglichkeiten finden - auch hier im Forum.
Für letzteres gibt es auch "fertige" Lösungen z.B. Adding Auto-Completion Support to Swing Comboboxes | Java.net
 
So, das erste Problem ist gelöst:

Java:
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
AutoCompleteDecorator.decorate(jComboBox6);
jComboBox6.setEditable(true);

Dadurch können nur Elemente der ComboBox ausgewählt werden.
Ist zwar noch etwas blöd, Eingaben zu löschen, aber damit kann ich momentan gut leben.

Meine nächste Frage wäre, wie kann ich bewerkstelligen, dass die ComboBox nur die Elemente anzeigt, die in meiner Access-Datenbank liegen?

Daten abrufen ist kein Problem, allerdings kann ich die momentan nur in einer jTable darstellen.

Kann ich anhand der jTable die ComboBox befüllen?
 
Meine nächste Frage wäre, wie kann ich bewerkstelligen, dass die ComboBox nur die Elemente anzeigt, die in meiner Access-Datenbank liegen?

Daten abrufen ist kein Problem, allerdings kann ich die momentan nur in einer jTable darstellen.

Kann ich anhand der jTable die ComboBox befüllen?
Verstehe zwar nicht warum die ComboBox aus der JTable befüllt werden soll, aber prinzipiell ist es ja egal woher die Daten kommen (Datenbank, Datei, Code, andere Komponente...) ein ComboBox kann man bei der Initialisierung über den Konstruktor. Zur Laufzeit kann man die Inhalte über deren Model verändern oder die Methoden die die JComboBox anbietet remove... add... (Details siehe API Dokumentation)
 
Es funktioniert! *freu*

Java:
 try{
	            //Abfrage definieren
	            query = "SELECT * FROM material";
	            //Datenbankverbindung herstellen
	            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	            Connection con=DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=G:/EDV/Allgemein/Toner-Ausgabe-Tool/toner.mdb","","" );
	            Statement stmt = con.createStatement();
	            ResultSet rst = stmt.executeQuery(query);
                   
	            while (rst.next())
                    {
                       
                        //Liest Hersteller, Tonerbezeichnung, Abteilung, Ausgabedatum
                        artikelname = rst.getString("Artikel");
                        jComboBox6.addItem(artikelname);
                    }
                    rst.close();
	            stmt.close();
	            con.close();
        }
        catch (Exception ex)
                {
                   System.out.println("Exception"+ex); 
                }

Hab es jetzt so gelöst, dass je Eintrag im ResultSet ein neues Item zur ComboBox hinzugefügt wird, klappt prima :hihi:
 

Zurück
Oben