如何从文本字段中获取值并在另一个类中使用它们?

时间:2019-01-01 17:18:23

标签: java swing

我有一个GUI,允许用户输入他们的个人信息。我想获取所有这些信息,并在另一个类中使用它来创建该人的实例。我不断得到

  

非静态方法getValues(String,String ...)不能从静态上下文中引用

即使我的方法都不是静态的。

我试图为每个文本字段使用单独的吸气剂,但这给出了相同的错误。我还尝试通过一种方法获取每个值,然后在另一类中调用它,但这也不起作用。

在此类中,我试图从GUI中获取值:

public class PatientStrategy implements IAccountStrategy {

@Override
public void createAccount(String accountType, String firstname, String lastname,
          String address, String postcode, String sex, Integer age){
    PMSGUI.getValues(accountType, firstname, lastname, address, postcode, sex, age);
}

这是我在GUI本身中用来从文本字段中获取值的方法:

public class PMSGUI extends javax.swing.JFrame {

public void getValues(String accountType, String firstname, String lastname, String address,
                      String postcode, String sex, Integer age) {
    accountType = cboAccountType.getSelectedItem().toString();
    firstname = txtFirstName.getText();
    lastname = txtLastName.getText();
    address = txtAddress.getText();
    postcode = txtPostcode.getText();
    sex = cboSex.getSelectedItem().toString();
    age = Integer.parseInt(txtAge.getText());
}

我正在使用观察者和策略模式,因此我将从GUI中获取值,并将创建每个人的新实例作为观察者。

我是Java编程的新手,所以我知道我可能会犯错。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

该错误消息告诉您getValues()(一种非静态方法)需要一个非静态上下文。该上下文由定义类的任何实例提供。实例化是从“静态”类到“动态”对象的构造(此对象只能在程序运行时存在)。由于一个类可以有多个从一个类创建的对象,因此每个对象称为实例

现在,如果一次最多只有一个这样的窗口,则可以将Singleton pattern应用于GUI类。然后,您将可以通过提供的类的静态实例访问所有非静态方法。

public class PMSGUI extends javax.swing.JFrame {
    private static final PMSGUI instance = new PMSGUI();

    private PMSGUI() {} // Restrict instantiation

    public static PMSGUI getInstance() {
        return instance;
    }

    // Add your custom methods further down here
}

现在在您的调用方法中引用它,使用

PMSGUI.getInstance().getValues(accountType, firstname, lastname, address, postcode, sex, age);