1

文字列の配列があり、文字列を Jframes に出力したいと考えています。for を使用して、Jpanel で Jframe を作成する別のクラスを呼び出します。次のようになります。

for(int i=0;i!=v.length;i++){  
  (...)
  NewWindow wind = new NewWindow();
}

問題は、これらの Jframe の 1 つを閉じたいときです。タイトル/ウィンドウ名は知っていますが、window は最後に作成された Jframe に対してのみ有効であるため、ポインターを失いました。

ポインターを失うことなく、不明な数の Jframe を作成する、または Jframe のフォーカスを取得する別の方法がわかりません。Javaで可能ですか?

4

3 に答える 3

3

ウィンドウへの参照を保持しないのはなぜですか?

NewWindow[] windows = new NewWindow[v.length];
for (int i = 0; i < v.length; i++) {
    // (...)
    windows[i] = new NewWindow();
}

または、代わりに:

ArrayList<NewWindow> windows = new ArrayList<NewWindow>(v.length);
for (int i = 0; i < v.length; i++) {
    // (...)
    windows.add(new NewWindow());
}

編集: または、スカーシュの答えに従って、文字列の値でウィンドウにアクセスできるようにしたい場合は、Map<String, NewWindow>

于 2013-03-30T12:24:59.783 に答える
2

Map を使用して参照を保持できます。例:定義

Map<String,NewWindow> windows = new HashMap<String,NewWindow>();
for (int i=0; i != v.length; i++) {
  NewWindow wind = new NewWindow();
  windows.put(v[i], wind);
}

そして後で、そのようなものでウィンドウへの参照を取得します

String titleName = ...
NewWindow wind = windows.get(titleName);
// close window

でもまじで… 何個窓開けるの?

于 2013-03-30T12:27:53.760 に答える
2

複数の JFrame を表示するという GUI 設計に反対する人もいるかもしれません (そして、これには重大な問題があると信じています)。一連のオブジェクトを参照します。解決策は、単一の JFrame への 1 つの参照を使用するのではなく、ArrayList<JFrame>または他のコレクションを使用して複数のオブジェクトを参照することです。JFrame を作成して表示するときは、それをコレクションに入れます。もちろん、オブジェクトがビューから削除されるときは、コレクションからオブジェクトを削除してください。

于 2013-03-30T12:24:15.930 に答える