【问题标题】:java Access a window/Jframe by window name/titlejava 通过窗口名称/标题访问窗口/Jframe
【发布时间】:2013-03-21 01:16:09
【问题描述】:
我有一个字符串数组,我想在 Jframes 中打印字符串。我使用 for 来调用另一个类,它将创建一个带有 Jpanel 的 Jframe。它是这样的:
for(int i=0;i!=v.length;i++){
(...)
NewWindow wind = new NewWindow();
}
问题是当我想关闭其中一个 Jframe 时。我知道标题/窗口名称,但我丢失了指针,因为 wind 仅对创建的最后一个 Jframe 有效。
我不知道在不丢失指针或获取 Jframe 焦点的情况下创建未知数量的 Jframe 的另一种方法。 java可以吗?
【问题讨论】:
标签:
java
swing
pointers
window
setfocus
【解决方案1】:
为什么不只保留对 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>
【解决方案2】:
有人可能会反对您显示多个 JFrame 的 GUI 设计(相信我,我确实对此有一些重大问题),但暂时搁置这一点,您遇到的基本问题是您正在尝试使用单个引用变量来引用一堆对象。解决方案是不要使用一个对单个 JFrame 的引用,而是使用 ArrayList<JFrame> 或其他集合来引用多个对象。在创建和显示JFrame的时候,把它放在集合中,然后当对象从视图中移除时,当然一定要从集合中移除。
【解决方案3】:
您可以使用地图来保存参考。例如。定义
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
但是说真的……你会打开多少个窗口?