问题是,这样做:editUser name = new editUser()
是你正在创建一个新的实例(除了事实上,类名称应该按照大小写以大写字母开头)。这会导致您丢失任何数据,因为您现在正在引用新的对象。
如果需要从以前的帧访问数据,你需要做的将是两种:
- 所有相关的数据创建一个新的对象,并把它传递给下一个框架或
- 将当前帧传递到下一帧。这将使新框架能够引用前一框架。
作为一个附注,Card Layout可能与您试图达到的目标相关。
编辑: 按您的评论的问题: 假设你有一个editUser
框架,说我们把它叫做frame1
你填入你需要的所有数据。 然后,用户按下Next或类似的东西,导致他/她转到下一帧,因此frame1
将不再隐藏或不存在,具体取决于您的实现。我们称之为第二帧frame2
。现在,在frame2
中,您需要访问frame1
中存储的详细信息。这样做:editUser name = new editUser();
将导致frame2
创建新frame1
的实例,因此这意味着您已创建一个具有空值的新框架。调用name.getUser()
不应该产生任何东西。
当我提到创建一个对象与相关的数据我的意思是,如果你正在编辑用户值,你可以创建一个对象,例如所有的信息被编辑。因此,它可能有领域,如userId
,originalUserName
,newUserName
等
一个用户按下下一步你frame1
,你可以创建和填充这个对象,并用它来将数据从一个帧转移到下一个。在这种情况下,您要创建的对象将称为数据传输对象(DTO)。
所以,你的第二个框架的构造看起来像这样:
public editPass(UserEditDTO userEditDTO)
{
initComponents();
String test = userEditDTO.getNewUserName(); //gets the new username the user has provided.
}
而在你editUser
类,只是创造editPass
一个新实例之前,你会做一些像这样:
...
UserEditDTO uEDTO = new UserEditDTO();
uEDTO = ... //set all the relevant fields here
new editPass(uEDTO).setVisible(true);
...
或者,您可以将参考传递给frame1
而不是DTO。这种方法更简单。所以,你的editPass
构造函数应该是这样的:
public editPass(editUser editUser)
{
initComponents();
String test = editUser.getUser();
}
与您editUser
代码看起来像这样:
...
new editPass(this).setVisible(true);
...
谢谢你的建议,但这里的下一个问题,我将如何创建一个对象相关数据? 看到我的理解是,我正在创建一个名为getUser的对象,请原谅我,如果我错了,但不是我做了什么? – Silentdarkness 2013-02-15 06:24:22
正如我注意到的那样,我使用netbeans来为我创建框架。 – Silentdarkness 2013-02-15 06:26:55
@ user1982690:我扩展了我的答案。 – npinti 2013-02-15 06:39:52