0

イライラするので、ちょっとした質問をする必要があります。

Javaで1つのフレームから別のフレームに1つの値を渡すにはどうすればよいですか?

以下に、値を返すはずの小さなスクリプトを書きましたが、他のフレームで値にアクセスする方法がよくわかりません。

以下は、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();

}

アドバイスをよろしくお願いします。

4

1 に答える 1

0

問題は、これを行うことです: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);
...
于 2013-02-15T06:19:21.510 に答える