将JTextField从Frame传递到java中的另一个类
这是一个简单的GUI类,用户可以输入accountNum和密码,然后单击按钮。我想将accountNum和密码发送到另一个类将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(){
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命名约定。如果直接复制/粘贴到现有文件中,会出现一些错误。