【问题标题】:Checking whether JTextFields are empty检查 JTextFields 是否为空
【发布时间】:2017-06-14 03:38:12
【问题描述】:

我在 uni 从事 Java 项目,我必须尽可能地忠于面向对象。所以我有一个疑问。

我有许多带有文本字段和按钮的窗口,每次单击按钮时,我都需要检查框架中的文本字段是否为空。

现在我所做的是在 ActionListener 类中添加一个新方法并将其命名为 check()。此方法检查我所说的内容,如果有空文本字段,它会引发我创建的异常(比如说 EmptyFieldsException)。

然后我在 actionPerformed 中有一个 try/catch 块,调用 check 方法。如果捕获到异常,则会弹出一个 JOptionPane。

我的问题是:这是处理此类问题的好方法(使用异常)吗?还是实际上是矫枉过正?也许我可以简单地在 actionPerformed 中使用 if 语句,我对此有点困惑。

【问题讨论】:

  • 恕我直言,不要为此使用例外。异常应该用于异常情况,(不幸的是?)无效输入并不是那么异常。稍后处理输入时可以使用异常,有点提醒您忘记检查输入,但不是在检查输入时。
  • 异常很慢,不应该用于普通检查。特别是它们不应该用于像空文本字段这样不寻常的东西。使用简单的if(myTextField.getText.length() == 0) 或类似名称。
  • @rossum 您缺少getText() 上的括号。
  • @Brandon。哎呀!感谢您的更正(尽管我确实说“或类似”:))更好,if(myTextField.getText().length() == 0) 或类似。

标签: java


【解决方案1】:

您应该坚持创建一个使用 if 语句检查所有文本字段并返回布尔值的方法。

private boolean checkFields(){
        if(textField1.getText().lenght()<1)
            return false;
        if(textField2.getText().lenght()<1)
            return false;
        //check all text fields

        return true;
}

代表您的按钮操作的方法将首先调用 checkFields() 方法,如果返回 true,则在通知用户未填写所有文本字段后继续否则返回。

private void buttonAction(){
        if(!checkFields()){
            Alert message=new Alert(        Alert.AlertType.WARNING);
            message.setHeaderText("Text field empty");
            message.setContentText("One of the text fields is empty");
            message.showAndWait();
            return;
        }

        //continue the method
    }

如果您确保该方法仅在所有 TextField 都有文本时才运行,则无需担心。异常的抛出和捕获成本要高得多,应该在异常情况下使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 2013-07-18
    • 2013-07-12
    • 2013-07-27
    • 2015-08-09
    • 2017-10-07
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多