Java - 通过框架传递值

时间:2013-02-15 06:13:17

标签: java

我需要问一个小问题,因为它让我感到恼火。

如何在Java中将一个谷从一个帧传递到另一个帧?

下面我写了一个小脚本,它应该返回值,但我不知道如何在另一帧中访问它。

以下是将JcomboBox中的当前值作为字符串返回到另一帧的代码:

public String getUser(String user)

{

 user = (String)jComboBox1.getSelectedItem().toString();

return user;

}

我认为它的工作方式是将该类的一个新实例调用到另一个框架中(类名称是editUser),所以这就是我认为我需要做的事情。

public editPass() 

{

initComponents();

editUser name = new editUser();

String test = name.getUser();

}

提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

问题在于:执行此操作:editUser name = new editUser()是您正在创建一个新实例(除了类名称应按照约定以大写字母开头)。这会导致您丢失任何数据,因为您现在正在引用新对象。

如果您需要访问前一帧中的数据,您需要做的是:

  • 创建一个包含所有相关数据的新对象,并将其传递给下一帧OR
  • 将当前帧传递到下一帧。这将允许新帧能够引用前一帧。

作为旁注,Card Layout可能与您要实现的目标相关。

编辑: 根据您的评论问题: 假设您有一个editUser框架,我们称之为frame1并填充您需要的所有数据。 然后,用户按下Next或类似的东西,使他/她进入下一帧,因此frame1将被隐藏或不再存在,具体取决于您的实现。

让我们调用第二帧frame2。现在,在frame2中,您需要访问frame1中存储的详细信息。这样做:editUser name = new editUser();会导致frame2创建frame1实例,这意味着您创建了一个包含空值的新框架。调用name.getUser()不应该产生任何结果。

当我提到使用相关数据创建一个对象时,我的意思是,如果您正在编辑用户值,您可以创建一个对象,例如所有已编辑的信息。因此,它可能包含userIdoriginalUserNamenewUserName等字段。

用户在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);
...