我进入面向对象的编程和大学任务我必须做一个简单的记忆游戏。记忆游戏本身我已经创建并且有效。
现在我想做到这一点,以便用户必须登录'这样我以后就可以保存他的用户名了。 我坚持这一点,因为我仍然熟悉何时使用它们的对象等。
我想要实现的是当用户按下“登录”时,当前帧关闭,并打开一个新帧。一旦我这样做,我就会实例化一个新的Person person = new Person()
。但是我如何实现它,以便在创建新人时,我可以从该类外部访问他?
我当前的代码
public void confirmLogin(ActionEvent e)
{
//When user presses login button
//Save the username so i can present it on the next Frame
//Create a new Person and set the username input as his username.
Person person= new Person();
person.setUsername(usernameField.getText());
//Open the new frame
//In this frame i want to access person.
Program program = new Program();
this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}
计划类:
public class Program extends JFrame {
JLabel usernameLabel = new JLabel();
Program() {
this.setSize(200,200);
this.setLayout(new FlowLayout());
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
//How do i access person from here?
usernameLabel.setText("Username");
this.add(usernameLabel);
this.setVisible(true);
}
}
我不完全确定我是否掌握了它并且在初始化之后是否可以从范围中访问person
。
答案 0 :(得分:0)
现在有了代码,不能在Person
范围之外访问confirmLogin()
。如果您希望Program
可以访问它,那么我只是将其作为参数传递。
例如:
public void confirmLogin(ActionEvent e){
Person user = new Person();
person.setUsername(usernameField.getText());
Program program = new Program(user);
this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
}
public class Program extends JFrame {
JLabel usernameLabel = new JLabel();
Program(Person user) {
this.setSize(200,200);
this.setLayout(new FlowLayout());
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
// Get the username from the user
usernameLabel.setText(user.getUsername());
this.add(usernameLabel);
this.setVisible(true);
}
}
答案 1 :(得分:0)
有很多方法可以做到这一点,但我认为最常见的是创建一个类来保持Person
的值,以便以后可以访问它。
例如,您可以在主类中使用静态字段:
public class Main {
public static Person logon;
public static void main( String... args ) {
// starts your program
}
}
或者您可以使用您实例化的类,例如,如果您有一个类型为MemoryGame
的类,您正在为游戏本身使用。
public class MemoryGame {
private Person logon;
public void setLogon( Person p ) { logon = p; }
public Person getLogon() { return logon; }
}
当然,您应该在confirmLogin方法中设置这些值。
public void confirmLogin(ActionEvent e)
{
//When user presses login button
//Save the username so i can present it on the next Frame
//Create a new Person and set the username input as his username.
Person person= new Person();
person.setUsername(usernameField.getText());
Main.logon = person; // <- here
// or...
memoryGame.setLogon( person ); // or here
在调用memoryGame
方法之前,需要注入(设置) confirmLogon
。静态字段更容易一些,使用注入被认为是更好的做法,并提供更好的关注点分离。