問題は、これを行うことです:editUser name = new editUser()新しいインスタンスを作成していることです (慣習に従って、クラス名は大文字で始まる必要があるという事実に加えて)。これにより、新しいオブジェクトを参照しているため、データが失われます。
前のフレームのデータにアクセスする必要がある場合は、次のいずれかを行う必要があります。
- 関連するすべてのデータを含む新しいオブジェクトを作成し、それを次のフレームに渡す OR
- 現在のフレームを次のフレームに渡します。これにより、新しいフレームが前のフレームを参照できるようになります。
補足として、カード レイアウトは、達成しようとしていることに関連している可能性があります。
編集:コメントの質問に従って:editUserフレームがあると仮定して、それを呼び出しframe1、必要なすべてのデータを入力するとします。次に、ユーザーは [次へ] を押すか、次のフレームに移動する同様のものを押すためframe1、実装に応じて、非表示になるか存在しなくなります。
2 番目のフレームを と呼びましょうframe2。ここで、 にframe2保存されている詳細にアクセスする必要がありますframe1。このようにすると、 の新しいインスタンスeditUser name = new editUser();が作成されます。つまり、値が空の新しいフレームが作成されたことになります。呼び出しても何も得られません。frame2frame1name.getUser()
関連データを使用してオブジェクトを作成すると述べたとき、ユーザー値を編集している場合、たとえば編集されたすべての情報を持つオブジェクトを作成できることを意味しました。したがって、、、、などのフィールドを持つことができuserIdます。originalUserNamenewUserName
ユーザーが で [次へ] を押すframe1と、このオブジェクトを作成して入力し、それを使用して 1 つのフレームから次のフレームにデータを転送できます。この場合、作成するオブジェクトはデータ転送オブジェクト (DTO) と呼ばれます。
したがって、2 番目のフレームのコンストラクターは次のようになります。
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);
...