如何创建一个不接受在输入对话框中输入的特定数量数字的异常? [复制]

Posted

技术标签:

【中文标题】如何创建一个不接受在输入对话框中输入的特定数量数字的异常? [复制]【英文标题】:How to create an exception that doesn't accept certain amount of numbers entered in input dialog? [duplicate] 【发布时间】:2021-02-28 01:39:12 【问题描述】:
Pattern p = Pattern.compile("^[0-9]0,3$");
Matcher m = p.matcher(in);
if (m.find()) 
    JOptionPane.showMessageDialog(null, " 4 integers please");

这是一个添加数字的按钮

尝试创建限制对话框中数字数量的异常,它会检测数字是否在限制范围内,但不会停止程序。

【问题讨论】:

这是一个向文本区域添加数字的按钮,因此如果输入 3 个整数,它应该会给出我在上面创建的错误消息 @Java1245 - 它应该是一个整数中最多 4 位数字还是您想要 4 个整数? 只能接受 4 位数字 【参考方案1】:

我不知道这段代码的上下文,但它不会调用自定义异常。如果用户输入无效输入,只需使用循环显示对话框:

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);

// ...

另外,您希望将if(m.find()) 更改为if(!m.find()),否则“请仅输入四个整数:”对话框只会在用户输入正确的整数数量时显示。


如果必须使用异常,只需创建一个扩展 Exception 的类 类:

public class MyException extends Exception 

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


并在你的 if 语句中实现它:

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

【讨论】:

我知道你来自哪里,我有一个不接受字母的 try and catch 块,你提供的代码仍然接受数字。我想循环是最好的方法。任何想法 或者我可以试试!= 4【参考方案2】:

您提供的代码确实比需要的少..

但是,当您在 TextArea 中输入的字符超过 3 时,这是一种触发事件的方法。

假设您的TextArea 被命名为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);
        
    );

【讨论】:

我认为它需要文本属性之后的参数【参考方案3】:

您可以简单地使用in.matches("\\d4") 作为条件并仅在此条件为true 时添加到文本区域。

import javax.swing.JOptionPane;

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

【讨论】:

这是有道理的,但它不会阻止数字添加到文本区域 确实会弹出消息对话框 它给出了调度错误 @Java1245 - 我已经更新了答案以满足这个要求。 我明白了,但这允许数字到文本区域,现在它不显示消息

以上是关于如何创建一个不接受在输入对话框中输入的特定数量数字的异常? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何输入特定数量的数字c ++? [复制]

如何使用仅接受数字的输入范围创建 PasswordBox?

输入数字接受尾随破折号

列出具有特定扩展名的目录和文件数量,构建特定菜单

如何创建只接受数字和单个点的 SwiftUI TextField?

如何在html中给出特定的输入类型?