Verifier

Status
Nicht offen für weitere Antworten.

Alex_winf01

Top Contributor
Hallo liebe Forengemeinde,

Folgender Code liegt vor (Ausschnitt, da Gesamtcode zu gross):

Java:
class DatumVerifier extends InputVerifier 
        {
  			private static final String DELIMITER = ".";

  			public boolean verify(JComponent component) 
  			{
    			if (component instanceof JTextField) 
    			{
      				String text = ((JTextField)component).getText();
      				StringTokenizer tokenizer = new StringTokenizer(text, BehandlungsbeginnVerifier.DELIMITER);
      				if (tokenizer.countTokens() != 3) 
      				{
        				return false;
      				}
      
      				// Tage ermitteln:
      				String buffer = tokenizer.nextToken();
      				if (buffer.length() != 2) 
      				{
        				return false;
      				}
      				// prüfen 
      				// ...
      
      				// Monat ermitteln:
      				buffer = tokenizer.nextToken();
      				if (buffer.length() != 2) 
      				{
        				return false;
      				}
      				// prüfen 
      				// ...
      
      				// Jahr ermitteln:
      				buffer = tokenizer.nextToken();
      				if (buffer.length() != 4) 
      				{
        				return false;
      				}
      				// prüfen 
      				// ...
    			}
    			return true;
  			}
		}

Diese Klasse habe ich an das Textfeld angehangen und funktioniert auch soweit. Mein Problem: Unter dem Textfeld ist eine JComboBox. Wenn ich jetzt statt 01.01.2000 folgendes eingebe: 1.1.00 kann ich trotzdem irgendeine andere JComboBox in der GUI bedienen. Zwar kehrt der Anwender dann zum Textfeld zurück, aber ich möchte dem Anwender eine Rückmeldung geben, WARUM immer in dieses Textfeld zurückgekehrt wird und ich möchte verhindern, dass der Anwender überhaupt eine andere Komponente der GUI bedienen kann. Wie kann ich das machen?

Danke schon mal im voraus.
 
Zuletzt bearbeitet von einem Moderator:

KrokoDiehl

Top Contributor
Kannst du noch dein
Java:
-Tag wieder zumachen dass wir den Code auch ordentlich sehen? :) 
So ist es zu anstrengend...
 

KrokoDiehl

Top Contributor
In deinem Verifier kannst du noch folgende Methode überschreiben:
Java:
class DatumVerifier extends InputVerifier 
        {
        @Override
        public boolean shouldYieldFocus(JComponent input)
        {
            boolean yield = this.verify(input);
            if ( ! yield)
            {
                //ggfs Fehlermeldung
                return false;
            }
            else
                return true;
        }

        @Override
        public boolean verify(JComponent component) 
        //...
        } //class
Damit verbietest du, dass deine Komponente mit diesem Verifier den Fokus verliert, wenn die Eingabe nicht durch
Code:
verify()
geht. Ich hoffe das löst dein Problem.
 

Alex_winf01

Top Contributor
@ KrokoDiehl

Das hat mir schon weitergeholfen.

Folgendes noch:

Ich habe noch Textfelder, da soll die Eingabe nach dem Muster ??.?? oder ??.? erfolgen. Das Fragezeichen steht für ein beliebiges Zeichen. Wie kann ich das über einen Verifier lösen?
 

Alex_winf01

Top Contributor
@ MacMallow

könntest Du mir ein Beispiel dafür geben?

@ all

ich habe da noch zwei Textfelder, bei der die Eingabe wie folgt erlaubt sein soll:

a) 1.0
b) 10.0
c) 100.0

Wie würdet ihr das machen?
 

MacMallow

Mitglied
@ KrokoDiehl

Das hat mir schon weitergeholfen.

Folgendes noch:

Ich habe noch Textfelder, da soll die Eingabe nach dem Muster ??.?? oder ??.? erfolgen. Das Fragezeichen steht für ein beliebiges Zeichen. Wie kann ich das über einen Verifier lösen?
Versuch mal den String auszulesen und ihn folgender Methode zu übergeben:
Java:
Boolean check(String s) {
		return s.matches("[A-Za-z0-9]{2}.[A-Za-z0-9]{1,2}");
	}
Entspricht der String nicht dem RegEx "[A-Za-z0-9]{2}.[A-Za-z0-9]{1,2}" (2 beliebige Buchstaben oder Ziffern, gefolgt von einem Punkt und einem/einer bis zwei weiter Buchstaben oder Ziffer/n) kannst du den benutzer ja darauf aufmerksam machen, das Textfeld zurücksetzten oder was auch immer.

ich habe da noch zwei Textfelder, bei der die Eingabe wie folgt erlaubt sein soll:

a) 1.0
b) 10.0
c) 100.0

Wie würdet ihr das machen?
Das sollte so funktionieren:
Java:
Boolean check(String s) {
		return s.matches("10{0,2}.0");
	}

Hab selbst schon länger nix mehr mit RegEx gemacht und bin nicht mehr ganz so Syntaxsicher, hoffe aber mal dass das hier richtig ist ;) Bei mir hats zumindest funktioniert (allerdings nur kurz getestet). Wikipedia und Google helfen dir weiter wenns um den Syntax geht^^
 
Zuletzt bearbeitet:

Alex_winf01

Top Contributor
Hallo @ all

danke für Eure Hilfe. Hat mir toll geholfen. Jetzt habe ich noch ein letzes Problem: Ich habe ein Textfeld, indem jede beliebige Stringfolge (z. b. "Irgendein Text") erlaubt ist. Das einzigste verbotene Zeichen ist das ";". Wie kann ich die Eingabe des ";" verhindern? Danke schon mal im voraus.
 

MacMallow

Mitglied
Wenn du es wieder mit Regulären Ausdrücken machst kannst du den Strichpunkt mit folgendem Ausdruck ausschließen: "[^;]*"
Das ^ negiert nachfolgendes Zeichen, d.h. in diesem Fall darf jedes Zeichen außer der Strichpunkt eingegeben werden. Der * bedeutet, dass es beliebig viele Zeichen sein dürfen.
 

MacMallow

Mitglied
Was mir gerade noch einfällt:
Java:
Boolean check(String s) {
        return s.matches("10{0,2}.0");
    }
funktioniert so nicht, weil der Punkt für ein beliebiges Zeichen steht. Wenn ich mich recht erinnere muss der Ausdruck so lauten: 10{0,2}\\.0
Falls ich falsch liege korrigiert mich.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben