繁体   English   中英

验证double是否在两个值之间,并且GUI打开两个JFrame

[英]Validating a double to be between two values and GUI opens two JFrames

因此,我一直在编写一个程序,该程序接受用户输入的员工数据并将其添加到ArrayList进行显示。 该程序工作正常,除了两点。 首先,我正在尝试验证用户输入的每小时费率在6到160美元之间。 这是该代码:

    try{
        double r = Double.parseDouble(rate.getText());

        if (r >= 6 && r <= 150){
            test.setRate(r);
        }
    } catch(NumberFormatException e){
        JOptionPane.showMessageDialog(null, "Sorry, hourly rate must be between $6 and $150.");
        return;
    }

它确实验证它在这些值之间,但如果不是,则将其简单地设置为0,而不是向用户显示消息并退出方法。

我的第二个问题有些复杂,说实话,我完全迷失了。 当我运行程序进行测试或调试时,它会打开两个窗口。 主窗口完全是空白的,但是可以控制EXIT_ON_CLOSE命令,而第二个窗口具有我编写的所有代码。 我尝试搜索可能已经初始化但找不到的第二个JFrame 我有大量的代码,并且不确定可能需要什么,但是我认为这是基于行为导致问题的代码:

    face = new JFrame();
    face.setSize(300,300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    GroupLayout design = new GroupLayout(face.getContentPane());
    face.setLayout(design);
    face.setVisible(true);

    design.setAutoCreateGaps(true);
    design.setAutoCreateContainerGaps(true);
    design.setVerticalGroup
    (
        design.createSequentialGroup()
            .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(fName)
                .addComponent(first)
                .addComponent(list))
            .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)                    
                .addComponent(lName)
                .addComponent(last))
            .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)                    
                .addComponent(hWork)
                .addComponent(hours))
            .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)                    
                .addComponent(hRate)
                .addComponent(rate))
            .addComponent(admin)
            .addComponent(market)
            .addComponent(account)
            .addComponent(prod)
            .addComponent(sales)
            .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)                    
                .addComponent(submit)
                .addComponent(exit))
    );


    design.setHorizontalGroup
    (
        design.createSequentialGroup()
            .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(fName)
                .addComponent(lName)
                .addComponent(hWork)
                .addComponent(hRate)
                .addComponent(admin)
                .addComponent(market)
                .addComponent(account)
                .addComponent(prod)
                .addComponent(sales)
                .addComponent(submit))
            .addGroup(design.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addComponent(first)
                .addComponent(last)
                .addComponent(hours)
                .addComponent(rate)
                .addComponent(exit))
            .addComponent(list)
    );
}

除了创建单个控件外,这还与GUI设计有关。 任何见识将在这里非常欢迎! 如果我忘了张贴东西,我会很乐意这样做。

尝试阅读允许的内容...

if (r >= 6 && r <= 150){
    test.setRate(r);
}

如果您像我一样,然后结束并“现在做什么?” ...当值正确解析为double ,会发生什么,但超出范围...?

您将需要添加else条件,以将所有条件限制在指定范围之外。

if (r >= 6 && r <= 150){
    test.setRate(r);
} else {
    // Show error message here
}

至于第二个问题,请考虑提供一个可运行的示例来演示您的问题。 这将减少混乱并改善响应。

同时,您可能还想看看如何使用Spinners ,它将使您能够定义一个组件,该组件几乎可以完成您的代码片段试图做的事情...

发生您的第一个问题是因为,如果r不在6到150之间,则try块不会引发NumberFormatException因此不会执行catch 您需要添加else语句以显示该消息。

boolean showError = false;
try{
    double r = Double.parseDouble(rate.getText());

    if (r >= 6 && r <= 150){
        test.setRate(r);
    }else{
       showError = true;
    }
} catch(NumberFormatException e){
     showError = true;
}

if(showError){
    JOptionPane.showMessageDialog(null, "Sorry, hourly rate must be between $6 and     $150.");
}

由于您正在使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 直接我想您是在扩展JFrame的类中执行此代码的,这意味着您有2个JFrame ,这是您在调用包含该代码和face的类时创建的。

如果您有一个扩展JFrame的类,不要创建其他JFrame ,则应删除:

face = new JFrame();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM