问题在于这样做:editUser name = new editUser()
是您正在创建一个新实例(除了根据约定类名应以大写开头的事实)。这会导致您丢失任何数据,因为您现在正在引用一个新对象。
如果您需要访问前一帧的数据,您需要做的是:
- 使用所有相关数据创建一个新对象并将其传递到下一帧或
- 将当前帧传递到下一帧。这将允许新框架能够引用前一个框架。
作为旁注,卡片布局可能与您要实现的目标相关。
编辑:根据您的评论问题:假设您有一个editUser
框架,假设我们调用它frame1
并填充您需要的所有数据。然后,用户按下 Next 或类似的东西会导致他/她进入下一帧,因此frame1
将不再隐藏或不存在,具体取决于您的实现。
让我们称之为第二帧frame2
。现在,frame2
您需要访问存储在frame1
. 这样做:editUser name = new editUser();
将导致frame2
创建 的新实例frame1
,因此意味着您创建了一个具有空值的新框架。调用name.getUser()
不应该产生任何东西。
当我提到使用相关数据创建对象时,我的意思是,如果您正在编辑用户值,您可以创建一个对象,该对象将包含所有已编辑的信息。所以它可以有像userId
, originalUserName
,newUserName
等这样的字段。
用户在您的 中按下 Next 后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);
...