当前位置: 首页 > 面试题库 >

Java Swing:实现输入值的有效性检查

佟阳飙
2023-03-14
问题内容

在我的Swing应用程序中,用户必须先插入数字和值,然后才能切换到下一个窗口。现在,作为干净程序,我将检查每个输入是否有效,如果无效,则会显示错误消息,并且下一个窗口不会打开。

此检查的结构如下(示例):

Button buttonToOpenNextWindow = new JButton("next");
button.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){
        if(checkValidty){
            // (...)
            new WindowA();
            frame.dispose(); // (*)
        }
    }
});

(*)注意: 我知道多个JFrames的原理很丑陋,我将要更改它,但是对于这个问题,它是无关紧要的。

现在,这个问题的重点是this checkValidity(),我将其结构如下:

private boolean checkValidity(){

    // check input 1
    try{
        Integer.parseInt(textField1.getText());
    }catch (NumberFormatException e){
        new ErrorDialog("input 1 is invalid!"); // own implemented dialog
        return false;
    }

    // check input 2
    try{
        Integer.parseInt(textField2.getText());
    }catch (NumberFormatException e){
        new ErrorDialog("input 2 is invalid!"); // own implemented dialog
        return false;
    }

    // (...)

    // check input n
    try{
        Integer.parseInt(textField_n.getText());
    }catch (NumberFormatException e){
        new ErrorDialog("input n is invalid!"); // own implemented dialog
        return false;
    }
    return true;
}

这完全符合我的要求,但是代码本身非常丑陋,因为具有多个输入选项,该方法的长度为200、300或更多行(因为我不仅检查例如它是否是数字,而且还检查数字是否有意义)在程序逻辑等方面)。是否有Swing自己的方法来检查这种情况?还是有更好的主意,如何使用拆分方法完全实现此功能?


问题答案:

一种解决方案是使用Swing
InputVerifier验证每个JTextField使用的输入。由于每个字段的验证功能都相同,因此可以将单个实例用于所有组件:

public class MyNumericVerifier extends InputVerifier {
    @Override
    public boolean verify(JComponent input) {
       String text = ((JTextField) input).getText();
       try {
          Integer.parseInt(text);
       } catch (NumberFormatException e) {
          return false;
       }

       return true;
    }
}

InputVerifier verifier = new MyNumericVerifier()
textField1.setInputVerifier(verifier);


 类似资料:
  • 问题内容: 这里的Python新手非常抱歉,我确定这是一个愚蠢的问题,但是我似乎无法在要求我使用while循环检查有效用户输入的教程中解决以下挑战。 (使用Python2.7) 这是我的代码,但无法正常工作: 上面打印输出到控制台: 这显然是不正确的-循环应该在用户输入“ y”或“ n”时结束,但是我不确定如何执行此操作。我在这里做错了什么? 注意:挑战要求我同时使用运算符和 问题答案: 较短的解

  • 问题内容: 如何检查shell脚本中IP地址的有效性,该范围在to 的范围内? 问题答案: 如果您使用的是bash,则可以对模式进行简单的正则表达式匹配,而无需验证四边形: 如果您坚持使用POSIX Shell,则可以使用BRE而不是ERE来做基本相同的事情: 请注意,假设您的正则表达式锚定在字符串的左侧,因此不需要缩写。 如果确认每个四边形小于256很重要,那么显然您将需要更多代码: 甚至更少的

  • 问题内容: 我很好奇,用Java 创建对象的最明显的方法已被弃用,并且似乎已被使用宽大日历的不太明显的方法“替代”。 如何检查以日,月和年的组合形式给出的日期是否为有效日期? 例如,2008-02-31(如yyyy-mm-dd)将是无效日期。 问题答案: 当前的方法是使用日历类。它具有setLenient方法,该方法将验证日期和引发异常,如果超出示例,则抛出异常。 忘记添加:如果您获得日历实例并使

  • 这里的Python新手非常抱歉,我确信这是一个愚蠢的问题,但在一个教程中,我似乎无法解决以下挑战,该教程要求我使用while循环来检查有效的用户输入。 (使用Python2.7) 这是我的代码,但它工作不正常: 上述内容打印到控制台: 这显然是不对的- 注意:挑战要求我同时使用运算符和

  • 我目前正在尝试为一个我为好玩而开发的网站创建一个登录/创建帐户页面。在创建帐户表单中,我有一个用户名、姓名、电子邮件、密码和验证密码的输入字段。我在输入字段中也有模式,以便用户生成有效的帐户信息。以下为表格: 澄清:用户名模式要求您的用户名只有大写和小写字母和数字,并且必须至少包含5个字符,最多包含40个字符。电子邮件要求您输入有效的电子邮件地址模式。密码要求至少包含8个字符,并且必须包含大小写字

  • 你可以在截图中看到,有一个JPanel分为两个区域,左区和右区。左侧区域有许多文本链接。当我单击SLA Criteria链接时,它将弹出SLA Criteria窗口。弹出窗口是JFrame对象。 现在,我试图将弹出窗口放在JPanel的右侧区域,这意味着不再有弹出窗口,即当我单击SLA标准链接时,其内容将显示在JPanel的右侧区域。JPanel正确区域的现有内容将不再使用。这个概念与java a