将JTextField从Frame传递到java中的另一个类

将JTextField从Frame传递到java中的另一个类,java,constructor,Java,Constructor,这是一个简单的GUI类,用户可以输入accountNum和密码,然后单击按钮。我想将accountNum和密码发送到另一个类 public class mainWindow extends JFrame { private JTextField jtfCustomerName=new JTextField(8); private JTextField jtfPassword=new JTextField(20); Button login; public mainWindow(){

这是一个简单的GUI类,用户可以输入accountNum和密码,然后单击按钮。我想将accountNum和密码发送到另一个类

public class mainWindow extends JFrame {
private JTextField jtfCustomerName=new JTextField(8);
private JTextField jtfPassword=new JTextField(20);
Button login;

public mainWindow(){

    JPanel p1=new JPanel(new GridLayout(3,2));
    p1.add(new JLabel("Customer name:"));
    p1.add(jtfCustomerName);
     p1.add(new JLabel("Password:"));
    p1.add(jtfPassword);
    login=new Button("login");
    p1.add(login);
    add(p1,BorderLayout.CENTER);
    login.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent event){
            System.out.println("test..");



        }
    });



}


public String getAccNum(){
    return jtfCustomerName.getText();
}
 public String getPassword(){
    return jtfPassword.getText();
}
    }
这是主类,我想在这里获得帐号和密码。我试过几种方法,都得到空值。我读了一些帖子,我知道我需要使用构造函数。我不太了解其他帖子,所以我不得不寻求帮助

public class CustomerLoginGUIAPP {


   public static void main(String[] args) {


        mainWindow main=new mainWindow();
        main.setVisible(true);
        main.setSize(600,400);
        main.setLocation(300,300);
        System.out.println("Account num is " + ????);
        }}

因为我知道我应该使用构造函数,所以我创建了这个类。但我不知道如何真正使用它。我知道基本构造函数(customer c=new customer(“s123”、“abdcd”);如果我想获得accNum,我可以使用“c.getAccNum()”)。

您应该能够将对象强制转换到主窗口。这样就可以输入公共方法

//这样做:

public class customer {


private String AccNum;
private String password;

public customer(String AccNum,String password){
this.AccNum=AccNum;
this.password=password;

}    

public String getAccNum(){
return AccNum;
}

public String getPassword(){
return password;
}
 public void setAccNum(String AccNum) {
    this.AccNum = AccNum;
}

public void setPassword(String password) {
    this.password = password;
} 
}
public class mainWindow {
....
private static customer person; // NEW

public static void main(String[] args) {
    mainWindow main=new mainWindow();
    main.setVisible(true);
    main.setSize(600,400);
    main.setLocation(300,300);
    login.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent event){
          System.out.println("test..");
          final int accNum = getAccNum();
          final String password = getPassword();
          createCustomer(accNum, password);
        }
    });
}

private static void createCustomer(int accNum, String password) {
    person = new customer(accNum, password);
    System.out.println("It works -> Customer: " + person.getAccNum() + " - " + person.getPassword());
}

一个好的模式是让窗口创建某种结果对象,当窗口消失时,显示窗口的人可以得到这种结果对象。我会将您的MainWindow类更改为如下内容:

public class customer {


private String AccNum;
private String password;

public customer(String AccNum,String password){
this.AccNum=AccNum;
this.password=password;

}    

public String getAccNum(){
return AccNum;
}

public String getPassword(){
return password;
}
 public void setAccNum(String AccNum) {
    this.AccNum = AccNum;
}

public void setPassword(String password) {
    this.password = password;
} 
}
public class mainWindow {
....
private static customer person; // NEW

public static void main(String[] args) {
    mainWindow main=new mainWindow();
    main.setVisible(true);
    main.setSize(600,400);
    main.setLocation(300,300);
    login.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent event){
          System.out.println("test..");
          final int accNum = getAccNum();
          final String password = getPassword();
          createCustomer(accNum, password);
        }
    });
}

private static void createCustomer(int accNum, String password) {
    person = new customer(accNum, password);
    System.out.println("It works -> Customer: " + person.getAccNum() + " - " + person.getPassword());
}
然后在CustomerLoginGUIAPP中访问它,如下所示:

public class MainWindow extends JFrame {
    private JTextField jtfCustomerName=new JTextField(8);
    private JTextField jtfPassword=new JTextField(20);
    private Customer result;

    public MainWindow(){

        JPanel p1 = new JPanel(new GridLayout(3,2));
        p1.add(new JLabel("Customer name:"));
        p1.add(jtfCustomerName);
        p1.add(new JLabel("Password:"));
        p1.add(jtfPassword);
        Button login = new Button("login");
        p1.add(login);
        add(p1,BorderLayout.CENTER);
        login.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event){
                result = new Customer(jtfCustomerName.getText(), jtfPassword.getText()); //set the result here
                setVisible(false); //hide this window
            }
        });
    }

    public Customer getResult()
    {
        return result;
    }
}

然后保持您的Customer类不变。

这样,它将创建一个具有您插入的accnum和密码的客户。我了解您在做什么,但我以前也尝试过。我又试了一次,没用。在我输入帐号和密码之前,它只会打印“It works->Customer-”。现在,在您按下登录按钮之后,您将创建在本例中称为“person”的客户。希望这能解决您的疑惑:)请注意,我将所有类名大写,以遵循Java命名约定。如果直接复制/粘贴到现有文件中,会出现一些错误。