Eingabeüberprüfung

davidh38

Bekanntes Mitglied
Hi Leute,

wenn ich nach einer Eingabe auf "ok" klicke würde ich gern eine Fehlermeldung ausspucken, die den richtigen Wertebereich angibt und dann sollen wieder alle Felder zur Eingabe bereit sein. Wie modellier ich das am besten?
 

njans

Top Contributor
Wir können nicht helsehen ;)
Daher wäre es gut, wenn du dein Problem in einen beschriebenen Kontext betten würdest.
 

hdi

Top Contributor
Ich schätz mal sowas?!

Java:
int input;
boolean exception;
do{
   exception = false;
   try{
          input = Integer.parseInt(JOptionPane.showInputDialog(...));
   }
   catch(NumberFormatException e){
         exception = true;
   }
} while(input < MIN_VALUE || input > MAX_VALUE || exception);
 

davidh38

Bekanntes Mitglied
Ich schätz mal sowas?!

Java:
int input;
boolean exception;
do{
   exception = false;
   try{
          input = Integer.parseInt(JOptionPane.showInputDialog(...));
   }
   catch(NumberFormatException e){
         exception = true;
   }
} while(input < MIN_VALUE || input > MAX_VALUE || exception);

ich habe das jetzt wie folgt implementiert, allerdings loopt der trotzdem die ganze Zeit, sodass ich gar nichts eingeben kann, wenn ich auf "ok" geklickt habe. Es soll aber eine Fehlermeldung erscheinen und dann wieder das Fenster zur Eingabe:

Java:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;


public class Eingabeüberprüfung {
	
	
	public static void main (String [] args){
		
	
		final JFrame jFrame = new JFrame("hey");
		FlowLayout l = new FlowLayout();
		l.setHgap(200);
		jFrame.setLayout(l);
		
	
		final JTextField jTextField = new JTextField();
		jTextField.setPreferredSize(new Dimension(100,25));
		
		
		JButton jButton = new JButton("haha");
		
		jFrame.add(jTextField);
		jFrame.add(jButton);
		jFrame.setVisible(true);
		jFrame.setSize(400,100);
		
		jButton.addActionListener(new ActionListener(){

			int input;
			@Override
			public void actionPerformed(ActionEvent arg0) {
				
		
				do{
				try{
					
					input = Integer.parseInt(jTextField.getText());
					
				}
				catch (NumberFormatException p){
					System.out.println("nicht das richtige format");
				}
			
				if (input<10){
					System.out.println("kleiner als 10");
					
				}
				
				}while (input<10);
				
				
				jFrame.dispose();
				
				
				
			}
			
		});
		
		
	}

}
 

hdi

Top Contributor
allerdings loopt der trotzdem die ganze Zeit, sodass ich gar nichts eingeben kann
Er loopt nicht, er hängt fest. Niemals solch eine Schleife in der actionPerformed oder einer anderen vom EDT aufgerufenen Methode! Lies dich mal zum Thema Event Dispatcher Thread (EDT) ein.

Aber, so wie du es hier machen willst brauchst du eig. keine Schleife. Du hast dir da nen eigenen Dialog gebastelt oder? Du musst beim Klick auf deinen Button nur einmalig prüfen ob da was gültiges drin steckt (if). Wenn nicht, zeigst du ne Meldung, auch das geht über JOptionPane:

Java:
JOptionPane.showMessageDialog(jFrame, "Fehler", "Bitte gültigen Wert eingeben", JOptionPane.ERROR_MESSAGE);

Aber imho in diesem Fall noch besser: Häng nen CaretListener an dein Textfeld. Bei jeder eingabe (caretChanged) prüfst du den Wert darin ab. Wenn er nicht passt, setzt du deinen Button auf setEnabled(false), so kann der User gar nicht erst draufklicken. Du kannst zur zusätzlichen Unterstreichung der fehlerhaften Eingabe in diesem Zug auch z.B. das Textfeld rot umranden lassen

Code:
textfield.setBorder(BorderFactory.createLineBorder(Color.RED));

PS Noch ein allgemeiner Hinweis:
Bei Verwendung von Layout Managern setzt man die Größe des Frames idR nicht per setSize, sondern lässt die passende Größe durch den Layout Manager und den preferredSizes der Komponenten errechnen. Nimm das jFrame.setSize() raus und mach statt dessen (nach dem adden aller Komponenten!) ein jFrame.pack(); (Am besten aber vor dem setVisible)
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben