java按窗口名称/标题访问窗口/ Jframe

时间:2013-03-30 12:21:21

标签: java swing pointers window setfocus

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

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

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

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

3 个答案:

答案 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

但严重的是......你打开多少个窗户?