1

我有一个字符串数组,我想在 Jframes 中打印字符串。我使用 for 来调用另一个类,它将创建一个带有 Jpanel 的 Jframe。它是这样的:

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

问题是当我想关闭其中一个 Jframe 时。我知道标题/窗口名称,但我丢失了指针,因为风仅对创建的最后一个 Jframe 有效。

我不知道另一种方法来创建未知数量的 Jframe,而不会丢失指针或获得 Jframe 的焦点。在java中可以吗?

4

3 回答 3

3

为什么不只保留对 windows 的引用?

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());
}

编辑:或者根据skirsch的回答,如果您希望能够通过字符串的值访问窗口,请使用Map<String, NewWindow>

于 2013-03-30T12:24:59.783 回答
2

有人可能会反对您显示多个 JFrame 的 GUI 设计(相信我,我确实对此有一些重大问题),但暂时搁置这一点,您遇到的基本问题是您正在尝试使用单个引用变量引用一堆对象。解决方案是不使用一个对单个 JFrame 的引用,而是使用一个ArrayList<JFrame>或其他集合来引用多个对象。在创建和显示 JFrame 时,将其放入集合中,然后当对象从视图中移除时,当然要确保将对象从集合中移除。

于 2013-03-30T12:24:15.930 回答
2

您可以使用地图来保留参考。例如定义

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);
}

And later on get a reference to the window with something like that

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

But seriously... how many windows will you open?

于 2013-03-30T12:27:53.760 回答