Tastendruck abweisen

Status
Nicht offen für weitere Antworten.

sg181

Mitglied
Hallo, Leute.

Habe folgendes Problem:
ich möchte in einem Textfeld nur bestimmte Eingaben zu lassen (um genau zu sein: alle Zahlen, Backspace, Del, Richtungstasten, evtl noch Pos1 und Ende).
Wollte das jetzt so regeln, daß das Textfeld nen KeyListener bekommen hat.
Da guck ich dann mittels getKeyCode() nach, was gedrückt wurde.

Ich hab allerdigns leider nicht rausgefunden, wie ich das drücken einen unzulässigen Taste abweise.
Also, wenn jemand 'a' drückt, soll nix passieren, daß a darf nicht im Textfeld erscheinen.

Kennt jemand diese Methode oder weiß jemand vielleicht ne bessere Art mein Problem zu lösen?

Danke schon mal
sg181
 
Guck dir das JFormateTextField an. Damit kannst du ziemlich genau angeben, was der User eingeben darf/nicht darf.

Es gibt auch vorgefertigte Formate für Dezimalzahlen, das Datum, und dann gibts noch irgendein verrücktes Ding von dem ich jetzt nicht weiss was es macht (das MessageFormat), das aber mächtig aussieht.
 
Das ist schon mal nicht schlecht.
Aber wenn ich mich nicht täusche, werden die Eingaben erst validiert wenn ich das Feld verlasse (oder?).

Das wäre auch ok, aber noch lieber wäre es mit, wenn falsche Zeichen einfach gar nicht akzeptiert werden würden.
 
Ich vermutete, dass es am einfachsten wäre, wenn man ne neue Klasse von JTextField erben lässt.. ein Blick in die Sourcen eröffnet jenes:
* Customized fields can easily be created by extending the model and
* changing the default model provided. For example, the following piece
* of code will create a field that holds only upper case characters. It
* will work even if text is pasted into from the clipboard or it is altered via
* programmatic changes.
* <pre><code>

&public class UpperCaseField extends JTextField {
&
& public UpperCaseField(int cols) {
& super(cols);
& }
&
& protected Document createDefaultModel() {
& return new UpperCaseDocument();
& }
&
& static class UpperCaseDocument extends PlainDocument {
&
& public void insertString(int offs, String str, AttributeSet a)
& throws BadLocationException {
&
& if (str == null) {
& return;
& }
& char[] upper = str.toCharArray();
& for (int i = 0; i < upper.length; i++) {
& upper = Character.toUpperCase(upper);
& }
& super.insertString(offs, new String(upper), a);
& }
& }
&}

Demnach geht alles über die insertString-Methode der Document-Klasse... dort muss man dann also die unerwünschten Zeichen abfangen...
Das ist aber jetzt erstmal nur nen Schuss ins Blaue 😉
 
Hey, perfekt, ihr Beiden. Man sollte die FAQs eben doch mal durchlesen.
Genau das was ich wollte.

Kleiner Tip noch: wenn man möchte, daß falsche Buchstaben gar nicht im Textfeld erscheinen, dann muß die Zeile

Code:
super.insertString(offset,s,attributeSet);

mit in den Try-Block!
 
Tjojo 🙂

Die geht schon die Klasse, die NegativeDoubleDocument ist jetzt auch neu (durch aufmerksam machen von Sky 😉)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben