Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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?
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();
}
});
}
}
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:
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
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)