我需要问一个小问题,因为它让我感到恼火。
如何在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();
}
提前感谢任何建议。
答案 0 :(得分:0)
问题在于:执行此操作: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);
...