【问题标题】:How to access JFrame Input field Objects from Validation Class如何从验证类访问 JFrame 输入字段对象
【发布时间】:2020-12-19 15:38:42
【问题描述】:

我创建了一个带有注册字段(名字、姓氏、电子邮件等)的 GUI,我的 GUI 类是 -

public class Registration extends JFrame {

    public static void main(String[] args) {
        try {
            Registration regform = new Registration ();
        } catch (Throwable e) {
            //
        }

      public Registration () {
            firstName = new JTextField();
            latName = new JTextField();
            btnRegistration = newJButton("Register");

            btnSubmit.addActionListener(new ActionListener() {
               public void actionPerformed(ActionEvent arg0) {
                  //want to do something similar as below
                  //Validatefields Vf = new Validatefields(Registration Rg);
             }
            });

       }
}

现在我想创建一个单独的类来验证单击“注册”按钮时的所有字段。我是 Java 编码新手,我无法从验证类访问注册类的所有输入字段。

请注意类注册和验证字段在同一个包下。

public Class Validatefields{
    public static void Validattion(Registration Rg){
      //here I want access the text field as below
      //String Name = "Object of Registration Class".firstName.getText();

        
        int validateFlag = 0;
        if(Name.equal("")){
          validateFlag = 1;
        }
        if(validateFlag==0){
            ApiCall APC = new ApiCall();
            APC.RequestAccessToken();
        }
   }
}

在接下来的步骤中,我想使用另一个类在成功验证时调用 API - 所以在这种方法中,我需要获取所有输入字段的值。

public Class ApiCall {
   public static void RequestAccessToken(){
      //Similarly I want to get the individual field value here and pass it in the API
   }
}

我试图从互联网的不同来源阅读类似的示例,但无法弄清楚。任何帮助都会非常棒。

【问题讨论】:

  • “我试图从互联网上的不同来源阅读类似的示例,但无法弄清楚。” 列出最好的 3 个以及为什么它们没有帮助。 SO 不是个人帮助台,如果人们对您不了解的内容了解得更多,它会帮助您。否则他们会玩“20 个问题”,这通常被视为无意义且令人厌烦的练习。
  • 专业提示:确保您在此处发布的代码是正确的,并且与您实际使用的代码完全相同。例如public Class ApiCall 会导致编译器错误。
  • "请注意类注册和验证字段在同一个包下。"直接在代码中显示package 语句会更清晰。

标签: java swing validation jframe


【解决方案1】:

现在我想创建一个单独的类来验证单击“注册”按钮时的所有字段。

这是一个非常好的主意,您有通用的方法。我认为主要问题是您没有正确的语法。但在我们开始之前,我的建议是您将 fields 传递给构造函数,而不是整个 Registration 对象:

public static void Validattion(JTextField firstName, JTextField lastName){

现在您通过将字段传递给构造函数来创建一个实例:

Validatefields Vf = new Validatefields(firstName, lastName);

请注意,您在这里只使用变量名,而不是类型。这很可能是您在尝试中遇到并导致错误的主要问题。

【讨论】:

  • 谢谢码学徒;我在想,如果我可以直接传递对象然后从对象中访问需要的字段,而不是传递 Validate 函数中的每个单独字段,因为 Validate 函数中的参数列表将是一个很长的列表。
  • @user1235994 这听起来像是一个合理的选择。那么您可能不需要将任何参数传递给构造函数。您应该考虑单独的验证函数,例如 validateFirstName()validateLastName()。这些可能不是最好的例子,但很容易想象某些字段组具有不同的验证规则,因此需要单独的验证函数。
  • @user1235994 所以这里的关键概念是我回答中的最后一句话,很可能是您在自己尝试中遇到的问题:调用函数时,只需为参数指定变量的名称, 不包括类型。
猜你喜欢
  • 2021-12-13
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
相关资源
最近更新 更多