2013-02-15 41 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