JTextField und Courso-Position

Von: , Frage gestellt am Fr, 18. Jun 2004

Hi,

ich mehre gerade an einem JTextField rum und will z.B. verhindern, daß einer Buchstaben eingibt, obwohl nur Zahlen zugelassen sind.

Theoretisch kann ich ja dies mit einem KeyListener machen.

Jetzt will ich aber genau das letzte eingegebene Zeichen löschen, auch wenn es mittendrin eingegeben wurde, also muß ich die Coursor-Position ermitteln.

Geht das irgendwie?

Besten Dank

Winni

13 Antworten zu dieser Frage

  1. Antwort von nach 2 Stunden 0 hilfreich
    Re: JTextField und Courso-Position

    Hi.

    Wenn du anstelle des JTextField ein JFormattedTextField nimmst, kannst du festlegen, dass nur zahlen eingegeben werden können (mittels eines NumberFormatter, den du dem Konstruktor übergibst). Zwar kann man weiterhin Buchstaben in das Eingabefeld schreiben, aber das Textfeld verlassen kann man erst bei einer korrekten Eingabe.

    Sebastian.

    • Antwort von nach 3 Tagen 0 hilfreich
      Re^2: JTextField und Courso-Position

      Hi,

      danke für den Tipp, habe bei Java ist eine Insel auch gleich was Passendes gefunden.
      Jetzt habe ich aber noch das Problem, daß ich ja das Komma in den Punkt und eine Bereichsprüfung machen muß.
      (sollte ich dafür zwischendurch einen KeyListener einbauen?)

      Und wird beim Verlassen noch ein Event generiert, damit ich einen weiteren Listener ansteuern könnte?

      Besten Dank

      Winni [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

      • Antwort von nach 3 Tagen 0 hilfreich
        Re^3: JTextField und Courso-Position

        Hi.

        Wenn du als NumberFormatter folgendes dem Konstruktor des JFormattedTextField übergibst, wird das Default-Trennzeichen deines Systems genommen:
        NumberFormat.getNumberInstance();
        Die Zeile sieht dann also so aus:

        JFormattedTextField asdf = new JFormattedTextField(NumberFormat.getNumberInstance());
        

        Wenn das nicht geht, musst du vorher per Locale.setDefault(Locale.GERMAN) ein Deutsches Locale auswählen, womit dann das richtige Trennzeichen gesetzt werden sollte.

        Sebastian.

        • Antwort von nach 3 Tagen 0 hilfreich
          Re^4: JTextField und Courso-Position

          Hi,

          ich habe das mit dem Format schon hinbekommen, aber nun will ich halt überprüfen, ob die Zahl vielleicht zu groß ist.

          Daher wäre es hilfreich zu wissen, ob und wenn ja Welches Event erzeugt wird, wenn das Feld verlassen wird.

          Besten Dank aber trotzdem..

          Winni [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

          • Antwort von nach 4 Tagen 0 hilfreich
            Re^5: JTextField und Courso-Position

            Hi.

            Das kann ebenfalls der NumberFormatter. Da gibt es 2 Methoden: setMinimum und setMaximum. Beide benötigen einen Parameter vom Typ Comparable. Dies ist ein Interface, welches z.B. von den Klassen Integer oder Double implementiert wird. Objekte dieser Typen können da also übergeben werden. Damit solltest du eigentlich das gewünschte hinbekommen.

            Wenn du doch die Events brauchst:
            Beim Verlassen des Feldes wird ein FocusEvent ausgelöst. Wenn der Benutzer auf Enter drückt, um die Eingabe zu übernehmen, wird ein ActionEvent ausgelöst.

            Sebastian.

            • Antwort von nach 6 Tagen 0 hilfreich
              Re^6: JTextField und Courso-Position

              Hi,


              dankesehr erstmal hierfür.
              Ich bin gerade dabei, das umzusetzen.

              Nun noch ein paar kleine Fragen:
              Wenn ich kein Format übergebe, verhält sich dann das Teil wie ein normales JTextField?
              Kann ich im Nachhinein noch das Format festlegen?
              Wie kann ich denn das Format für Integerzahlen festlegen?

              Dankesehr

              Winni [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

            • Antwort von nach 6 Tagen 0 hilfreich
              Re^7: JTextField und Courso-Position

              Hi. Nun noch ein paar kleine Fragen:
              Wenn ich kein Format übergebe, verhält sich dann das Teil wie
              ein normales JTextField?
              Das weiss ich leider auch nicht. Musst du einfach mal ausprobieren. Kann ich im Nachhinein noch das Format festlegen?
              Ja. Da gibt es eine Methode setFormatterFactory. Die bekommt allerdings nicht direkt ein Formatter-Objekt übergeben, sondern ein AbstractFormatterFactory-Objekt. Die Klasse ist abstract, du musst davon erben und da dann eine Methode getFormatter implementieren, die ein JFormattedTextField als Parameter übergeben bekommt und dann den Formatter zurückgibt. Wie kann ich denn das Format für Integerzahlen festlegen?
              Wenn es einfach eine beliebige Integerzahl sein soll und schon beim Erstellen des TextFields festgelegt werden soll:
              new JFormattedTextField(new NumberFormatter(NumberFormat.getIntegerInstance()));

              Sebastian.

            • Antwort von nach 25 Tagen 0 hilfreich
              Re^8: JTextField und Courso-Position

              Hi,

              (hat ne Weile gedauert, weil ich etwas anderes noch schaffen mußte) Hi. Nun noch ein paar kleine Fragen:
              Wenn ich kein Format übergebe, verhält sich dann das Teil wie
              ein normales JTextField?
              Das weiss ich leider auch nicht. Musst du einfach mal
              ausprobieren. Kann ich im Nachhinein noch das Format festlegen?
              Ja. Da gibt es eine Methode setFormatterFactory. Die bekommt
              allerdings nicht direkt ein Formatter-Objekt übergeben,
              sondern ein AbstractFormatterFactory-Objekt. Die Klasse ist
              abstract, du musst davon erben und da dann eine Methode
              getFormatter implementieren, die ein JFormattedTextField als
              Parameter übergeben bekommt und dann den Formatter zurückgibt.
              Hast Du irgendwo ne Doku wie das genau geht?
              Ich habe bisher nix brauchbares gefunden.

              Ich will halt ne Klasse von JFormattedTextField ableiten, und dann den Konstruktor mit ein paar Parametern aufrufen, den Konstruktor der Superclass muß ich aber Parameterlos aufrufen und den Rest halt danach mittels der Methoden einstellen. (erst nach ein paar Anweisungen kann ich die entsprechenden Formate festlegen) Wie kann ich denn das Format für Integerzahlen festlegen?
              Wenn es einfach eine beliebige Integerzahl sein soll und schon
              beim Erstellen des TextFields festgelegt werden soll:
              new JFormattedTextField(new
              NumberFormatter(NumberFormat.getIntegerInstance()));

              Sebastian.
              THX

              Winni

            • Antwort von nach 25 Tagen 0 hilfreich
              Re^9: JTextField und Courso-Position

              Hi, Ja. Da gibt es eine Methode setFormatterFactory. Die bekommt
              allerdings nicht direkt ein Formatter-Objekt übergeben,
              sondern ein AbstractFormatterFactory-Objekt. Die Klasse ist
              abstract, du musst davon erben und da dann eine Methode
              getFormatter implementieren, die ein JFormattedTextField als
              Parameter übergeben bekommt und dann den Formatter zurückgibt.
              Hast Du irgendwo ne Doku wie das genau geht?
              Ich habe bisher nix brauchbares gefunden.
              Nur die normale Java-API-Doku. Die gibt es hier: http://java.sun.com/j2se/1.4.2/docs/api/ Ich will halt ne Klasse von JFormattedTextField ableiten, und
              dann den Konstruktor mit ein paar Parametern aufrufen, den
              Konstruktor der Superclass muß ich aber Parameterlos aufrufen
              und den Rest halt danach mittels der Methoden einstellen.
              (erst nach ein paar Anweisungen kann ich die entsprechenden
              Formate festlegen)
              Wenn du aus einer abgeleiteten Klasse das Format festlegen willst, gibt es auch eine Methode setFormatter, das dürfte etwas einfacher sein als das mit der FormatterFactory, denke ich. Lies dir in der Doku einfach mal die Erklärungen zu den entsprechenden Klassen und Methoden durch. Wenn du dann noch weitere Fragen hast, melde dich einfach nochmal.

              Sebastian.



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!