【问题标题】: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&lt;String, NewWindow&gt;

    【讨论】:

      【解决方案2】:

      有人可能会反对您显示多个 JFrame 的 GUI 设计(相信我,我确实对此有一些重大问题),但暂时搁置这一点,您遇到的基本问题是您正在尝试使用单个引用变量来引用一堆对象。解决方案是不要使用一个对单个 JFrame 的引用,而是使用 ArrayList&lt;JFrame&gt; 或其他集合来引用多个对象。在创建和显示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
        

        但是说真的……你会打开多少个窗口?

        【讨论】:

        • 重新阅读这个问题,这可能是最好的答案。 1+
        猜你喜欢
        • 2011-11-06
        • 2013-05-09
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 2010-12-06
        • 2014-01-07
        • 1970-01-01
        相关资源
        最近更新 更多