2013-02-15 44 views
0

我需要问一个小问题,因为它让我感到恼火。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(); 

} 

在此先感谢您的任何建议。

回答

0

问题是,这样做:editUser name = new editUser()是你正在创建一个新的实例(除了事实上,类名称应该按照大小写以大写字母开头)。这会导致您丢失任何数据,因为您现在正在引用新的对象。

如果需要从以前的帧访问数据,你需要做的将是两种:

  • 所有相关的数据创建一个新的对象,并把它传递给下一个框架或
  • 将当前帧传递到下一帧。这将使新框架能够引用前一框架。

作为一个附注,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); 
... 
+0

谢谢你的建议,但这里的下一个问题,我将如何创建一个对象相关数据? 看到我的理解是,我正在创建一个名为getUser的对象,请原谅我,如果我错了,但不是我做了什么? – Silentdarkness 2013-02-15 06:24:22

+0

正如我注意到的那样,我使用netbeans来为我创建框架。 – Silentdarkness 2013-02-15 06:26:55

+0

@ user1982690:我扩展了我的答案。 – npinti 2013-02-15 06:39:52