【问题标题】:How to check which JTextFields are empty and inform the user about them?如何检查哪些 JTextField 为空并通知用户?
【发布时间】:2016-10-30 11:00:45
【问题描述】:

我有一个带有JTextFields 的代码示例。当用户没有在某些JTextField 中输入详细信息,然后单击“注册”按钮时,我希望通知用户他的错误/s。像这样:

您尚未输入学生中间名

您还没有输入学生地址

您尚未输入学生中间名和地址

而不是像

您尚未输入所有详细信息

我希望信息位于JLabel

我还希望空的JTextField/s 将其/它们的背景设置为红色。

我尝试了很多代码,但没有一个有效。

这是我的代码。我已经使用数组检查了哪些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 {

        }
    }
}

【问题讨论】:

标签: java swing jtextfield


【解决方案1】:

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

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

【讨论】:

  • 这里 field.getName() 将打印 null。为了克服这个问题,我可以使用与每个 jTextfield 对应的不同名称吗?
  • @CodeBae getName 将返回在setName 中设置的内容。看看我的例子。
  • 勺子喂食做得很好。请注意 OP 并没有真正学到任何东西,因为他甚至没有花时间理解您的代码来查看 setName() 方法在做什么。即使当 OP 要求我提供“完整”代码时,我也只是给 OP 提示以迫使他考虑自己在逻辑上解决问题。
  • @camickr : 对不起:(
【解决方案2】:

创建一个错误消息数组:

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( ... );
    }
}

寻找创建循环/可重用代码。如果您需要添加另一个文本字段进行测试,它会使维护变得更容易。

【讨论】:

  • 这真的很有帮助,你能给我完整的代码吗? @camickr
  • 正如你所说,我正在查看错误消息数组。但是,即使某些 jTextfields 不为空,它也会打印所有消息。我该如何解决?谢谢
  • 所以调试你的代码并找出你的逻辑为什么不能正常工作。您是否显示了您正在测试的变量的值?这就是编程的重点。你不能指望每次遇到一个小问题都会问一个问题。
  • 感谢您的帮助。但是我能再问一点吗?
  • 当我单击带有一些空 Jtextfields 的注册按钮时,文本区域将显示错误消息。然后当我在不同的 jTextFields 为空的情况下再次单击该按钮时,它会将错误消息附加到以前的错误消息中(其中一些 jTextfields 现在不是空的)。我该如何解决?你能帮帮我吗?
猜你喜欢
  • 2016-07-16
  • 2021-10-17
  • 2011-12-28
  • 1970-01-01
  • 2017-07-17
  • 2013-06-12
  • 1970-01-01
  • 2015-06-21
相关资源
最近更新 更多