如何检查哪些 JTextField 为空并通知用户?

How to check which JTextFields are empty and inform the user about them?

我有一个包含 JTextField 的代码示例。当用户没有在某些 JTextField 中输入详细信息,然后单击 "Register" 按钮时,我希望用户被告知他的 mistake/s。像这样:

You haven't entered Student Middle Name

You have not entered Student Address

You haven't entered Student middle name and Address

而不是

You have not entered all the details

我希望信息在 JLabel.

我还希望 is/are 为空的 JTextField/s 将 its/their background/s 设置为红色。

我试过很多代码,但 none 成功了。

这是我的代码。我已经使用数组来检查哪些 JTextField/s 是空的,但我不知道如何通知用户它们。

public void checkEmpty() {
    String fname = jTextField1.getText();
    String mname = jTextField2.getText();
    String lname = jTextField3.getText();

    String lineone = jTextField4.getText();
    String linetwo = jTextField5.getText();
    String linethree = jTextField6.getText();

    int fnam = fname.length();
    int mnam = mname.length();
    int lnam = lname.length();
    int lineon = lineone.length();
    int linetw = linetwo.length();
    int linethre = linethree.length();

    int[] check = {fnam, mnam, lnam, lineon, linetw, linethre};
    for (int i = 0; i < check.length; i++) {
        if (check[i] == 0) {

        } else {

        }
    }
}

创建错误消息数组:

String[] errors = 
{
    "First Name is missing",
    "Middle Name is missing",
    ...
};

然后在您的循环代码中,您可以只引用相应消息的数组。您可能想使用 JTextArea,因为您可能有多个消息:

if (check[i] == 0) 
{
    textArea.append( errors[i] );
}

您甚至可以通过创建一个文本字段数组来简化您的代码,然后您的循环代码将类似于:

for (int i = 0; i < textFields.length; i++) 
{
    JTextField textField = textFields[i];
    String text = textField.getText();
    int length = text.length();

    if (length == 0) 
    {
        textArea.append( ... );
    }
}

着手创建 loops/reusable 代码。如果您需要添加另一个文本字段进行测试,它会使维护更容易。

这是一个简单的例子。不是遍历输入的长度,而是遍历字段本身。如果一个是空的,则将其涂成红色并将其相应的消息附加到消息列表中。然后在标签上显示该列表。

public class Main {

    public static void main(String[] args) {

        JTextField fName = new JTextField();
        fName.setName("First Name");
        JTextField lName = new JTextField();
        lName.setName("last Name");
        JTextField address = new JTextField();
        address.setName("Address");

        JTextField[] fields = new JTextField[] {fName, lName, address};

        StringBuilder sb = new StringBuilder("<html>");
        for (JTextField field : fields) {
            if (field.getText().isEmpty()){
                field.setBackground(Color.RED);
                sb.append("<p>").append("You haven't entered " + field.getName());
            }
        }

        JLabel label = new JLabel(sb.toString());
    }
}