1
votes

Comment créer une exception qui n'accepte pas un certain nombre de nombres entrés dans la boîte de dialogue de saisie?

Pattern p = Pattern.compile("^[0-9]{0,3}$");
Matcher m = p.matcher(in);
if (m.find()) {
    JOptionPane.showMessageDialog(null, " 4 integers please");
}
It is a button that adds numbersTrying to create exception that limits amount of numbers in dialog , it detects if the number is within the limit but does not stop the program.

3 commentaires

C'est un bouton qui ajoute un nombre à la zone de texte, donc si 3 entiers sont entrés, cela devrait donner un message d'erreur que j'ai créé ci-dessus


@ Java1245 - Devrait-il contenir jusqu'à 4 chiffres dans un entier ou vous voulez 4 entiers?


seuls 4 chiffres doivent être acceptés


3 Réponses :


0
votes

Je ne connais pas le contexte de ce code, mais il n'appelle pas d'exception personnalisée. Utilisez simplement une boucle pour afficher la boîte de dialogue si l'utilisateur entre une entrée non valide:

if (!m.find()) {
    throw new MyException(4);
}

De plus, vous voulez changer if(m.find()) en if(!m.find()) sinon la boîte de dialogue "Veuillez entrer seulement quatre entiers:" ne s'affichera que lorsque l'utilisateur saisira le nombre correct d'entiers.


Si vous devez utiliser des exceptions, créez simplement une classe qui étend la classe Exception :

public class MyException extends Exception {

    public MyException(int amount) {
        super("Only " + amount + " integers are allowed");
    }

}

Et implémentez-le dans votre instruction if:

Pattern p = Pattern.compile("^[0-9]{0,3}$");
Matcher m = p.matcher(in);
while (!m.find()) {
    in = JOptionPane.showInputDialog(null, "Please only enter four integers:");
    m = p.matcher(in);
}
// ...


2 commentaires

Je vois d'où vous venez, j'ai un bloc try and catch qui n'accepte pas les lettres, le code que vous avez fourni accepte toujours les chiffres. Je suppose qu'une boucle est le meilleur moyen. Des idées


ou je pourrais essayer! = 4



0
votes

Vous avez vraiment fourni moins de code que nécessaire.

Mais voici un moyen de déclencher un événement lorsque les caractères saisis dans votre TextArea dépassent 3.

Disons que votre TextArea est nommé txtArea .

    txtArea.textProperty().addListener((observable, oldValue, newValue) -> {
        if(newValue.length()>3){
            JOptionPane.showMessageDialog(null, " 4 integers please");
            //Do whatever you need after the Alert is shown
            txtArea.setText(oldValue);
        }
    });


1 commentaires

Je pense qu'il attend un argument après la propriété text



0
votes

Vous pouvez simplement utiliser in.matches("\\d{4}") comme condition et ajouter à la zone de texte uniquement si cette condition est true .

import javax.swing.JOptionPane;

public class Main {
    public static void main(String[] args) {
        String in = JOptionPane.showInputDialog("Number: ");
        if (in.matches("\\d{4}")) {
            // ...Code to add the value to the textarea
        } else {
            JOptionPane.showMessageDialog(null, "Only 4 digits please.");
        }
    }
}


9 commentaires

Cela a du sens, mais cela n'empêche pas les nombres de s'ajouter à la zone de texte


la boîte de dialogue de message apparaît


Cela donne des erreurs d'expédition


@ Java1245 - J'ai mis à jour la réponse pour répondre à cette exigence.


Je vois, mais cela autorise les numéros dans la zone de texte et il n'affiche plus le message


@ Java1245 - Si vous essayez de saisir un entier qui n'est pas de 4 chiffres, ce code affichera le message d'erreur et le code à ajouter à la zone de texte ne sera pas exécuté. En revanche, si vous entrez un entier de 4 chiffres, le code à ajouter à la zone de texte ne sera pas exécuté et le message d'erreur ne sera pas affiché. Avez-vous une exigence différente?


Fonctionne, merci


@ Java1245 - Il y a quelque temps, vous n'avez pas accepté la réponse. Si vous l'avez fait accidentellement, vous pouvez l'accepter à nouveau. Si vous l'avez fait à cause d'un problème / doute, n'hésitez pas à commenter.


C'était un accident! , ma faute