我有一个字符串数组,我想在Jframes中打印字符串。我使用for来调用另一个类,它将使用Jpanel创建一个Jframe。它是这样的:
for(int i=0;i!=v.length;i++){
(...)
NewWindow wind = new NewWindow();
}
问题是当我要关闭其中一个Jframe时。我知道标题/窗口名称,但我丢失了指针,因为wind仅对最后创建的Jframe有效。
我不知道另一种方法来创建未知数量的Jframe,而不会丢失指针,或者获得Jframe的焦点。在java中可以吗?
答案 0 :(得分: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>
答案 1 :(得分:2)
有人可能反对你的GUI设计显示多个JFrame(并相信我,我确实有一些重要的问题),但暂时把它放在一边,你的基本问题是你试图使用一个单引用变量来引用一堆对象。解决方案是不对一个JFrame使用一个引用,而是使用ArrayList<JFrame>
或其他集合来引用多个对象。在创建和显示JFrame时,将其放在集合中,然后当然要确保在从视图中删除对象时从集合中删除该对象。
答案 2 :(得分: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);
}
稍后用类似的东西获取对窗口的引用
String titleName = ...
NewWindow wind = windows.get(titleName);
// close window
但严重的是......你打开多少个窗户?